Как справиться с конфликтом библиотек? (тот же пакет, другая версия) - PullRequest
1 голос
/ 04 декабря 2011

относящиеся: управление конфликтом на пути к классам Java

также связано: Java Classloader - как ссылаться на разные версии jar

У меня есть два jar-файла, в каждом из которых есть своя зависимость, включенная в jar-файл, но оба они в другой версии.

a.jar -> has c.class/c2.class/c3.class/.. version 0.3 in it

b.jar -> has c.class/c2.class/c3.class/.. version 1.0 in it

Но когда я попытался использовать их обоих в одном проекте. Кажется, он использует c.class только из одной банки, но не из другой. Это оказывается проблемой, поскольку API сильно отличается в обеих версиях. Есть ли какой-либо способ сказать им использовать c.class только из его соответствующей фляги? Я не могу изменить a.jar и b.jar здесь.

кстати. После быстрого поиска кажется, что люди предлагают OSGI и загрузчик классов, но я почти ничего не знаю об этом, какой самый быстрый способ справиться с этим? (уже читал немного о загрузчике классов, но все еще не уверен, как его использовать).

РЕДАКТИРОВАТЬ: Я предпочитаю использовать оригинальную библиотеку, с которой они связаны, так как я уже оценил эти два jar по отдельности (они являются инструментами для анализа текста с одним и тем же бэкэндом, но версия сильно отличается). Теперь я хочу объединить их обоих в одну и попытаться максимально приблизить среду к оригинальной. Прямо сейчас я следую решению Тревиса Уэбба, но все еще удивляюсь, почему баночка не разделяет оба набора библиотек.

1 Ответ

3 голосов
/ 04 декабря 2011

Самый быстрый способ:

Извлечь a.jar, удалите ненужный материал и повторно выполните его.JAR идентичен zip-файлу, что означает, что вы можете просто создать обычный zip-файл и переименовать его в .jar.

btw, это не ваша ошибка.От кого бы вы ни получили эти банки, они идиоты, потому что они включили внешние зависимости в свои выпуски, и они не должны этого делать.

...