На работе я часто получаю сборки Java Webapp для развертывания в рабочей среде, которые включают все зависимости в файлах .jar.
Иногда поставляемые сборки содержат дубликаты jar с разными версиями, например, log4j-1.2.3.jar
и log4j-1.2.4.jar
, что нарушает наш процесс развертывания.
Я ищу способ определить, являются ли два файла .jar разными версиями одной и той же вещи. В настоящее время мы смотрим на имена файлов, и если они отличаются только цифрами, мы считаем их дубликатами, но этот подход не работает, если версия удалена из имени файла.
Мне пришло в голову посмотреть содержимое файла jar, а именно файл MANIFEST.MF
, для свойства, уникального для этого файла.
Такое свойство должно:
- всегда присутствовать в любом файле .jar
MANIFEST.MF
- быть общим для всех версий / сборок этого .jar
- быть уникальным для этого .jar (например, должно отличаться для log4j и log4j-api)
Я проверил содержимое нескольких файлов манифеста и Implementation-Title
или Export-Package
кажутся хорошими кандидатами, но я не уверен, что они соответствуют критериям, указанным выше.
Как лучше всего определить, есть ли у нас дубликаты .jar-файлов?