2008-11-08 3 views
8

В моем проекте используются библиотеки Java, которые имеют свои собственные зависимости (например, Hadoop, Jetty). Я получаю разные версии одинаковых зависимостей, таких как ant 1.4.5, 1.4.6. Мой проект может захотеть использовать ant 1.4.7. Это небольшой пример, который может усложняться при больших зависимостях, таких как HTTP Commons.Смешивание различных версий библиотек Java

Как я могу получить все библиотеки и зависимости, чтобы играть хорошо? Есть ли способ изолировать каждую библиотеку (Hadoop, Jetty), чтобы они использовали только свои зависимости?

ответ

1

Если у вас есть исходный код, скомпилируйте все вместе. Если вы этого не сделаете, к сожалению, вам придется настроить таргетинг вашего источника на самый низкий общий знаменатель с целевой опцией javac. Вам нужно сделать это только в том случае, если при запуске приложения возникают проблемы, которые редко должны быть до тех пор, пока jvm является текущей версией (Java очень строгий в отношении совместимости с предыдущими версиями).

2

Вы можете управлять всеми этими функциями с помощью системы управления зависимостями - например, OSGI. Взгляните на динамические модули пружинного каркаса http://www.springsource.org/osgi

Вы также можете взглянуть на ту часть рамки, где Eclipse реализует OSGI. Взгляните здесь http://www.eclipse.org/osgi/

Короткий ответ - это просто пойти на самый низкий общий знаменатель. Помните, что «одобренный» каталог - ваш друг - когда дело доходит до управления конфликтующими зависимостями.

2

Maven также, как правило, справляется с этим довольно хорошо. Если не полностью, он, по крайней мере, будет обрабатывать основную часть, то вы можете разобраться с оставшимися проблемами.

Конечно, это означает, что вам нужно изменить процесс сборки, но, возможно, стоит потратить время, чтобы не вытащить ваши волосы из-за этого.

2

JarJar на помощь!

Ant taks, который как 1) упаковывает много банок в один, так и 2) позволяет переименовывать зависимости в файлах классов и, таким образом, загружать две версии одной и той же библиотеки!

+0

звуки фантазии WWW – 2017-10-19 21:05:34

0

J G указанный OSGi который был даже мой первый мысль при чтении этого вопроса.

Наличие нескольких версий одной и той же библиотеки является сильной стороной в OSGi. Если у нас есть некоторые сторонние продукты, о которых уже упоминалось, я думаю, что это справедливо, чтобы упомянуть спецификацию, стоящую за ней.

Вы можете получить его с официального сайта OSGi http://osgi.org