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

Проблемът, който често имам, е, че използвам действителни библиотеки в моите проекти. Сега, ако използвам този буркан в по-стари проекти, имам conflicts between the dependencies. Най-добрият пример е Guava. В някои проекти имам версия 12/13, а действителната версия на Guava е 18, това, което използвам в по-новите проекти/библиотеки.

Би било хубаво да опаковам всички зависимости в буркана, така че например, ако използвам Guava 18, той се преопакова като собствени класове в собствено пакетно дърво за този проект, така че мога да използвам по-новия буркан в старите си проекти със зависимост от проекта за Guava 13, без да има конфликти на версия на Guava, тъй като импортираният jar/lib/зависимост все още използва преопакована версия на 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/ за това. Той предоставя задача за мравка, която може да се използва вместо стандартна задача за буркан, и има елемент на правило за определяне на модела за преименуване.

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

person Tibor Blenessy    schedule 19.02.2015
comment
Плъгинът Maven shade е много по-ефективен и по-добър в интегрирането на maven builds, когато правите това. Въпреки това не знам дали може да се използва с Ivy builds, така че е честно да спомена и jarjar. - person eis; 19.02.2015
comment
Някой има ли пример как да преопаковате зависимости с gradle? - person hiaclibe; 14.11.2017