Как обнаружить дубликаты JAR в пути к классам? - PullRequest
24 голосов
/ 18 мая 2009

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

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

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

Ответы [ 5 ]

23 голосов
/ 18 мая 2009

JBoss Tattletale может помочь вам в этом.

Это бесплатный инструмент, который сканирует файлы JAR, используемые вашим проектом, и выдает отчет о них.

Среди его особенностей:

  • Найдите, если класс находится в нескольких файлах JAR
  • Найдите, если один и тот же файл JAR находится в нескольких местах
  • Поиск похожих файлов JAR с разными номерами версий
5 голосов
/ 02 мая 2012

Для этого есть плагин Maven: maven-duplicate-finder-plugin

[EDIT] Если вы хотите сделать это в модульных тестах самостоятельно, используйте

getClass().getClassLoader().getResources( "com/pany/package/Java.class" )

Если возвращается более одного URL, у вас есть дубликаты на пути к классам.

Недостатком является то, что это работает только в тех случаях, когда у вас были конфликты в прошлом. С другой стороны, это всего лишь несколько строк кода (или одна строка, когда вы пишете вспомогательный метод), и он работает на вашем сервере сборки.

2 голосов
/ 18 мая 2009

System.getProperty("java.class.path"), разделить, отсортировать, посмотреть на это человеческим глазом :-).

Он не будет включать путь к классам, полученный из манифестов внутри других банок: - (.

Или используйте http://www.jboss.org/tattletale в качестве одного из предложенных плакатов.

1 голос
/ 18 мая 2009

Я думаю, что самый простой способ - это сначала просто удалить целевую директорию. Надеюсь, копирование всех файлов .jar в не займет много времени.

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

0 голосов
/ 18 мая 2009

Вы можете написать простой скрипт для сравнения суммы md5 каждого jar-файла с любым другим jar-файлом и удаления дубликатов по пути.

...