Перепаковать зависимости в java

Проблема, с которой я часто сталкиваюсь, заключается в том, что я использую настоящие библиотеки в своих проектах. Теперь, если я использую эту банку в старых проектах, у меня есть conflicts between the dependencies. Лучший пример — Guava. В некоторых проектах у меня есть версия 12/13, а фактическая версия Guava — 18, которую я использую в новых проектах/библиотеках.

Было бы неплохо упаковать все зависимости в jar, например, если я использую Guava 18, он переупаковывается как собственные классы в собственном дереве пакетов для этого проекта, поэтому я могу использовать более новый jar в своих старых проектах с зависимостью от проекта. для Guava 13 без каких-либо конфликтов версий Guava, потому что импортированный jar/lib/dependency по-прежнему использует перепакованную версию Guava 18.

Кто-нибудь знает хороший способ сделать это? Любые рамки для этого? Надеюсь, я правильно объяснил свою проблему.

Факты (что я использую): Java 1.6-1.8 и Ivy и Eclipse Luna


person heaphach    schedule 19.02.2015    source источник
comment
Это вопрос плюща? Если это так, предоставьте файл ivy   -  person Mark O'Connor    schedule 20.02.2015


Ответы (1)


Можно использовать ссылки Jar Jar https://code.google.com/p/jarjar/. для этого. Он предоставляет задачу ant, которую можно использовать вместо стандартной задачи jar, и имеет элемент правила для определения шаблона переименования.

Другим вариантом может быть плагин Maven Shade, который может делать то же самое http://maven.apache.org/plugins/maven-shade-plugin/

person Tibor Blenessy    schedule 19.02.2015
comment
Плагин Maven Shade намного эффективнее и лучше интегрирует сборки maven при этом. Однако я не знаю, можно ли его использовать со сборками Ivy, поэтому будет справедливо упомянуть и jarjar. - person eis; 19.02.2015
comment
У кого-нибудь есть пример, как перепаковать зависимости с помощью gradle? - person hiaclibe; 14.11.2017