Как обнаружить дубликаты JAR в пути к классам?
Есть ли у кого-нибудь код для обнаружения дубликатов JAR в пути к классам?
Справочная информация. Если в пути к классам есть две версии одного JAR, действительно могут произойти странные вещи. Это может произойти даже при использовании таких инструментов, как Maven: измените зависимость и сначала создайте WAR без очистки. Поскольку target/webapp/WEB-INF/lib
не был очищен, зависимость будет там дважды.
Есть ли для этого сеть безопасности?
Ответы
Ответ 1
JBoss Tattletale может помочь вам в этом.
Это бесплатный инструмент, который сканирует файлы JAR, используемые вашим проектом, и дает вам отчет о них.
Среди его возможностей:
- Пятно, если класс находится в нескольких файлах JAR
- Пятно, если один и тот же JAR файл находится в нескольких местах.
- Найти похожие JAR файлы с разными номерами версий
Ответ 2
Существует плагин Maven для этого: maven-duplicate-finder-plugin
[EDIT] Если вы хотите сделать это самостоятельно, используйте
getClass().getClassLoader().getResources( "com/pany/package/Java.class" )
Если это возвращает более одного URL
, у вас есть дубликаты в пути к классам.
Недостатком является то, что это работает только в тех случаях, когда у вас были конфликты в прошлом. С положительной стороны, это всего лишь несколько строк кода (или одна строка при написании вспомогательного метода), и он работает на вашем сервере сборки.
Ответ 3
System.getProperty("java.class.path")
, разделите его, соберите, посмотрите на него с человеческим глазом
:-).
Он не будет включать путь к классам, полученный из манифеста внутри других банок: - (.
Или используйте http://www.jboss.org/tattletale в качестве одного из предложенных плакатов.
Ответ 4
Я думаю, что самый простой способ - просто сначала уничтожить целевой каталог. Надеемся, что копирование всех файлов .jar не займет много времени.
В противном случае вам придется каким-то образом сравнивать значимые файлы (напрямую, через вычисленную контрольную сумму или аналогичную). Который не кажется очень приятным вообще.
Ответ 5
Вы можете написать простой script, чтобы сравнить сумму md5 каждого файла jar с каждым другим файлом jar и удалить дубликаты на этом пути.