Как проверить зависимости между файлами JAR?
Недавно я взял на себя поддержку и программирование веб-системы, написанной на JSF. Код немного запутанный и избыточный, и да, никакой документации не существует.
Система имеет более 40 библиотек JAR, и большинство из них являются избыточными из-за старых версий и тестирования. Чтобы удалить один jar, я должен убедиться, что он не импортирован в код, поэтому я искал код для пути импорта jar (я использую IntelliJ IDE), убедился, что он не используется, и удалил его.
Однако после компиляции кода во время тестирования произошел ряд ошибок во время выполнения. Я понял, что я удалил некоторые банки, которые используются другими существующими банками.
Проблема, как мне убедиться перед удалением jar, что он не используется другим jar/java классом?
Несмотря на то, что в jar есть скомпилированные классы, скомпилированные классы имеют путь импорта необходимых библиотек. Но я не могу искать их с IntelliJ (не ищет внутри файлов JAR).
Единственный способ, которым я сейчас занимаюсь, - это проверять систему каждый раз, когда я удаляю банку, и посмотреть, могу ли я ее разбить! Это совсем не простой способ из-за огромного количества тестируемых функций.
Мне бы хотелось, чтобы был инструмент, в который я мог бы отправить несколько java-файлов /jar-файлов, и он отображал бы зависимости между ними.
6 ответов
Я знаю, что из проекта JBoss вышел инструмент под названием JBoss TattleTale, возможно, стоит взглянуть:
JDepend проанализирует зависимости для вас для любого количества JAR-файлов, файлов классов и т. Д. Отношение пакетов, которые он сообщает этим JAR-файлам, должно быть тривиальным дополнительным шагом.
Я также нашел JarAnalyzer, но, похоже, он больше не поддерживается.
Почему вы не используете Maven для своего проекта? это поможет вам в управлении зависимостями.
Что ж, сейчас 2013 год, поэтому я не уверен, что этот инструмент был хорош в 2009 году. Просто использовал его и нашел его полезным:Class Dependency Analyzer (CDA) (V1.14) http://www.dependency-analyzer.org/ Этот инструмент имеет графический интерфейс (Swing?). После добавления библиотек jar и классов Java будут показаны зависимости на уровне класса / пакета / контейнера (jar). Он также может показать иждивенцев. Таким образом, легко найти зависимость от банок и зависимых банок.
Также есть ClassDep из Jini SDK.
http://java.sun.com/products/jini/2.0/doc/api/com/sun/jini/tool/ClassDep.html