Глобальная стратегия.
1) Найти все классы, которые загружаются во время выполнения.
2) Список всех классов, доступных в пути к классам.
3) Сократите путь к классам, создав копии банок, содержащих только те классы, которые вам нужны.
Я сделал 1 и 2 часть, чтобы помочь вам.
1) Узнайте все загруженные классы. Вам нужно 100% покрытие кода (я говорю не о тестах, а о производстве). Запустите все возможные сценарии, чтобы все классы, в которых нуждается ваше приложение, были загружены и зарегистрированы.
Для регистрации загруженных классов попробуйте несколько подходов. Reflection , –verbose: флаг класса , также вы можете узнать об агенте java. Это позволяет модифицировать методы во время выполнения. Это пример кода java-агента или другого примера агента java
2) Чтобы найти все классы, доступные в jar, вы можете написать программу. Вам нужно знать все места, где находятся банки с приложениями. Зацикливайте эти банки (вы можете использовать ZipFile
), просматривайте ZipFileEntry
записей и собирайте все классы.
3) После этого напишите скрипт или программу, которая собирает ваше приложение. Например, теперь вы можете создать новый jar-файл для каждой библиотеки и поместить туда только необходимые классы.
Также вы можете использовать инструмент (опять же, вы программист, поэтому пишите программу), который проверяет код на зависимость от классов. Вы не хотите удалять классы, если они используются для компиляции. Когда я был студентом, я писал код alanyzer, который строит ориентированный граф для зависимостей классов.
Как отмечает @Gokul Nath KP, я делал это раньше. Я вручную изменяю зависимости gradle и maven, удаляя одну за другой, а затем полный регрессионный тест. Мне потребовалась неделя (наше приложение было небольшим по сравнению с современными мировыми корпоративными системами, созданными сотнями разработчиков).
Так что будьте креативны, и в случае успеха ваш проект будут использовать миллионы!