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

Как обнаружить дубликаты JAR в пути к классам?

Есть ли у кого-нибудь код для обнаружения дубликатов JAR в пути к классам?

Справочная информация. Если в пути к классам есть две версии одного JAR, действительно могут произойти странные вещи. Это может произойти даже при использовании таких инструментов, как Maven: измените зависимость и сначала создайте WAR без очистки. Поскольку target/webapp/WEB-INF/lib не был очищен, зависимость будет там дважды.

Есть ли для этого сеть безопасности?

4b9b3361

Ответ 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 и удалить дубликаты на этом пути.