В настоящее время я передаю очень большой путь к javac для компиляции java-проекта.
Я знаю, что некоторые из этих файлов jar не нужны.
Есть ли простой способ узнать, какие файлы не нужны?
В настоящее время я передаю очень большой путь к javac для компиляции java-проекта.
Я знаю, что некоторые из этих файлов jar не нужны.
Есть ли простой способ узнать, какие файлы не нужны?
Я предполагаю, что "удалить их один за другим и проверить, все еще компилируется и работает приложение" - это не ожидаемый ответ:)
(EDIT: хотя предложенный выше подход может быть немного автоматизирован, он остается как-то болезненным и должен быть альтернативный, по крайней мере, для зависимостей времени компиляции. После некоторого поиска в Google я нашел Jar Analyzer, который, кажется, является хорошим инструментом для этой работы, как описано в этом сообщении в блоге
Jar Analyzer сканирует для компиляции зависимости, что означает, что он может создать дерево, JAR файлы которого необходимы для компиляции JAR файлов, необходимых для компиляции этих JAR файлов, и так далее. Вы получаете очень хороший отчет/график, который показывает вам все JAR файлы и почему они там.
Вы также можете увидеть JAR файлы, которые не имеют никакого подключения к вашему коду, удалить их и их детей. То, что я нашел в нашей папке libs, было то, что около 20% из 150 файлов JAR в нашей папке libs не использовались во время компиляции, и это были возможные JAR файлы, которые нужно удалить.
Большая ошибка заключается в том, что вы не получаете никакого намека на то, какие JAR файлы используются только во время выполнения с помощью обнаружения и отражения. И здесь начинается настоящая работа.
Единственный способ узнать, используется ли JAR файл во время выполнения, - это в основном вытащить его, запустить ваше приложение и протестировать каждую функциональность. Если у вас есть умеренный размер, выполнение 100% регрессионного теста занимает много часов. Поэтому на практике я закончил много гаданий, быстрого и грязного тестирования и попросил выяснить, какая из зависимостей времени выполнения действительно используется.
Кажется довольно простым в использовании: загружать, распаковывать и запускать инструмент в каталоге, содержащем все банки. Или используйте предоставленную Ant задачу.)
У вас также есть loosejar.jar, который позволяет вам находить реальные зависимости jar вашего проекта во время выполнения!
Последняя сборка eclipse будет предупреждать вас о неиспользуемых импортах в вашем исходном коде
Компилятор имеет параметр -verbose
, и он довольно многословный. Он информирует каждый класс, который загружается и где он загружается из!
Хотя он не очень удобен для пользователя и не обеспечивает высокоуровневый анализ, я нашел его очень полезным для отладки конфликтов классов. Это говорит вам о банках, которые используются (с помощью grep
), а не тех, которые не используются.
Проверить Помощник классa >