У нас есть несколько кастовых медиаторов. Наиболее важным (и проблематичным c) является, вероятно, посредник для управления документами MongoDB. Нам нужно использовать последние версии драйверов 3.12.x. Проблема в том, что у WSO2 есть свои внутренние / плагины, версия 3.4.1.
Есть несколько блокировщиков для решения этой проблемы. Во-первых, не требуется перезапуск WSO2EI для незначительных изменений внутри посредника класса. Во-вторых, нет внешнего управления библиотеками в / dropins, / lib. Невозможно управлять им вручную, сохранять те же версии, которые использовались при разработке, разрешать транзитивные зависимости, выявлять коллизии и т. Д. c ... Моя цель - каким-то образом связать вместе maven-зависимости и посредники классов в развертываемом CAR.
До сих пор я пробовал все решения, представленные в документах
maven-shade-plugin
- не работает. Я мог игнорировать многие конфликты ресурсов, но есть странное поведение. Когда я вызываю посредник класса во время посредничества, возникает исключение.
java.lang.IllegalAccessError: tried to access class com.mongodb.DocumentToDBRefTransformer from class com.mongodb.MongoClientSettings
at com.mongodb.MongoClientSettings.<clinit>(MongoClientSettings.java:60)
Я подозреваю, что это связано с конфликтом версий. Class Mediator использует MongoClientSettings.class напрямую и, вероятно, использует затененную версию 3.12.x, тогда как DocumentToDBRefTransformer.class не используется напрямую и берется из 3.4.1 (загружается OSGi при запуске из / plugins), следовательно, IllegalAccessError.
Я попытался настроить инструкции OSGi в maven-bundle-plugin
, но похоже, что они явно игнорируются Carbon Deployer и / или Integration Studio.
Я также пытался использовать Java Библиотечный проект (lib / library / bundle) , который потенциально может добавлять пакеты OSGi во время выполнения через развертывание CAR, но при этом появляется еще один сложный уровень обслуживания, которого я стараюсь избегать - например, обновить вручную «bundles-data. xml» и указать ВСЕ экспортируемые пакеты ...
У меня нет идей, я очень признателен за любую помощь.
EDIT После очередной копки похоже, что IllegalAccessError в затененной банке выбрасывается платформой OSGi из-за использования разного ClassLoader. Почему это происходит, когда все в одной банке - за мной.