Подтвердить что ты не робот

Как узнать, какие файлы jar фактически используются при компиляции java-проекта

В настоящее время я передаю очень большой путь к javac для компиляции java-проекта.

Я знаю, что некоторые из этих файлов jar не нужны.

Есть ли простой способ узнать, какие файлы не нужны?

4b9b3361

Ответ 1

Вам понадобится инструмент

Ответ 2

Я предполагаю, что "удалить их один за другим и проверить, все еще компилируется и работает приложение" - это не ожидаемый ответ:)


(EDIT: хотя предложенный выше подход может быть немного автоматизирован, он остается как-то болезненным и должен быть альтернативный, по крайней мере, для зависимостей времени компиляции. После некоторого поиска в Google я нашел Jar Analyzer, который, кажется, является хорошим инструментом для этой работы, как описано в этом сообщении в блоге

Jar Analyzer сканирует для компиляции зависимости, что означает, что он может создать дерево, JAR файлы которого необходимы для компиляции JAR файлов, необходимых для компиляции этих JAR файлов, и так далее. Вы получаете очень хороший отчет/график, который показывает вам все JAR файлы и почему они там.

Вы также можете увидеть JAR файлы, которые не имеют никакого подключения к вашему коду, удалить их и их детей. То, что я нашел в нашей папке libs, было то, что около 20% из 150 файлов JAR в нашей папке libs не использовались во время компиляции, и это были возможные JAR файлы, которые нужно удалить.

Большая ошибка заключается в том, что вы не получаете никакого намека на то, какие JAR файлы используются только во время выполнения с помощью обнаружения и отражения. И здесь начинается настоящая работа.

Единственный способ узнать, используется ли JAR файл во время выполнения, - это в основном вытащить его, запустить ваше приложение и протестировать каждую функциональность. Если у вас есть умеренный размер, выполнение 100% регрессионного теста занимает много часов. Поэтому на практике я закончил много гаданий, быстрого и грязного тестирования и попросил выяснить, какая из зависимостей времени выполнения действительно используется.

Кажется довольно простым в использовании: загружать, распаковывать и запускать инструмент в каталоге, содержащем все банки. Или используйте предоставленную Ant задачу.)

Ответ 3

У вас также есть loosejar.jar, который позволяет вам находить реальные зависимости jar вашего проекта во время выполнения!

Ответ 4

Последняя сборка eclipse будет предупреждать вас о неиспользуемых импортах в вашем исходном коде

Ответ 5

Компилятор имеет параметр -verbose, и он довольно многословный. Он информирует каждый класс, который загружается и где он загружается из!

Хотя он не очень удобен для пользователя и не обеспечивает высокоуровневый анализ, я нашел его очень полезным для отладки конфликтов классов. Это говорит вам о банках, которые используются (с помощью grep), а не тех, которые не используются.