У меня есть два Java-проекта Test1 и Test2. Test1 имеет библиотеку lib, добавленную к ней в Eclipse Java Build Path. Test2 имеет добавленную банку в своем пути сборки.Как решить более глубокую версию jar-hell?
Test1 Test2
/src /src
lib Referenced Libraries
x-1.1.jar a.jar
y.jar x-1.2
z
Код в Test1 вызывает функции/классы y.jar, который зависит от x-1.1.jar. Я не знаю, какие функции/классы x-1.1.jar используются y.jar, поскольку у меня нет источника для банок. Аналогично Test2 вызывает функции/классы пакета z a.jar, которые имеют зависимость от x-1.2 verion jar.
Теперь у меня есть проект теста, где мне нужен как проекты Test1 и Test2
Test
/src
Test1 code
Test2 code
some other code which uses Test1 as well as Test2 libraries
lib
x-1.1.jar
y.jar
Referenced Libraries
a.jar
x-1.2
z
Теперь, когда я запускаю тестовый проект, я получаю в банке-ад ситуацию. Два подхода, используемый здесь мое исследование являются:
- Classpath: Проблема с этим подходом является то, что так как в библиотеке/банки для Test1, Test2 добавляются в затмении Java Build Path, только первую загруженную версию х .jar, и код Test2 ломается даже при использовании загрузчика классов.
- osgi: Проблема с подходом заключается в том, что я могу экспортировать только пакеты в папку src из Test1 и Test2 из пакета osgi, а не из тех, на которые ссылается проект. Но в тестовом проекте есть код, который использует библиотеки Test1 и Test2.
Надеюсь, что я достаточно ясен. Любая помощь приветствуется. Заранее спасибо.
Добавление дополнительной информации на вопрос: Мне нужно использовать два разных java-sdks в моем проекте, в которые были добавлены различные файлы jar. Конфликтующими являются:
jar file Test1 ver Test2 ver
org.apache.commons.codecs 1.3 1.6
org.apache.commons.logging 1.1.1 1.1.1
org.apache.log4j 1.2.7 1.2.15
httpclient 4.1.1 4.0.3
httpcore 4.1 4.1.4
Какие могут быть возможные способы сделать это?
OSGi: вы можете просто добавить иностранные пакеты в свой экспорт: http://stackoverflow.com/a/1235145/1165132 – Adrian
Знаете ли вы * наверняка *, что 'x-1.2.jar' is * not * backward - совместим с 'x-1-1.jar'? Кроме того, вы можете использовать инструмент JDepend, чтобы узнать, какие функции использует один JAR из другого. – kdgregory
Попробуйте bndtools ... –