Maven: включите сторонний jar со связанными библиотеками, которые конфликтуют с другими зависимостями.

Я искал ответ на этот вопрос в течение нескольких дней и оказался пустым.

Я разрабатываю плагин Confluence, который интегрируется со сторонним приложением. У этого стороннего приложения есть хороший REST API, и они даже предоставляют Java SDK (ура!). За исключением..... Java SDK включает версию Jersey (1.18), которая конфликтует с разветвленной версией Confluence для Jersey (1.8-atlassian_15). SDK не был выпущен в виде JAR-файла Maven (или, по крайней мере, в него не включен pom.xml). В META-INF jar есть другие pom.xml для используемых им зависимостей, но сам SDK только что выпущен поставщиком как загрузка jar.

Итак, как я делал в прошлом, я mvn install:install-file лох со своими собственными идентификаторами группы и артефакта, думая, что все будет в порядке. Intellij распознал библиотеку, все скомпилировалось хорошо, а затем я попробовал свой тестовый вызов REST API. Это когда он выдал ошибку, которая сделала очевидным конфликт между версиями.

ТАААК. Есть ли способ обойти это? Могу ли я «изолировать» банку SDK таким образом, чтобы код выполнялся в своей собственной сделке, не подвергаясь воздействию встроенной версии библиотек Confluence, которые использует SDK? У меня есть ощущение, что даже после того, как зависимость от Джерси будет разрешена (если это вообще возможно), будут другие проблемы .... SDK также связывает с ним конкретную версию Jackson, Swagger и т. Д.

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

Я обратился к разработчикам SDK, чтобы узнать, могут ли они выпустить более удобный для maven выпуск, но я не надеюсь, что это вообще будет сделано, и даже это так, их цикл выпуска сильно отличается от моих собственных требований (читайте : Мне нужно решение сейчас). Это моя последняя попытка перед тем, как переписать REST-клиент с нуля.


person SpaDusA    schedule 06.09.2016    source источник


Ответы (1)


Могу ли я «изолировать» банку SDK таким образом, чтобы код выполнялся в своей собственной сделке, не подвергаясь воздействию встроенной версии библиотек Confluence, которые использует SDK?

Что вы можете. Часто используемый способ сделать это — использовать плагин Maven Shade, который преобразует существующий jar-файл в затененный jar-файл, используя другую иерархию пакетов и избавляясь от конфликта имен пакетов. См. также документацию по перемещению пакетов. Я предлагаю вам использовать это - это то, что я делал в подобных случаях (хотя я не занимался разработкой плагинов для слияния, но это должно быть то же самое, что и с другими платформами).

person eis    schedule 15.09.2016