Плагин Maven Bundle встраивает deps исключить файлы или пакеты
Мне нужна одна из библиотек Apache (axis-jaxrpc
) в моем пакете OSGi, но он неисправен, так как его jar содержит класс из встроенных java (javax.xml.namespace.QName
). Я не могу заменить его любой другой альтернативой - это побочная зависимость для другой зависимости для...... вы знаете, как это происходит:)
Проблема в том, что всякий раз, когда я собираю пакет и запускаю его, он запускается просто отлично. Но если я коснусь любой функциональности, связанной с jaxrpc
Я получаю LinkageError, утверждая, что QName
уже был загружен <bootloader>
,
Мне удалось взорваться jaxrpc
jar в мой пакет jar и вручную удалите каталог javax.namespace (т.е. отредактируйте содержимое пакета) перед запуском приложения. Это добилось цели - я больше не получаю LinkageError.
Теперь вопрос... Как мне справиться с этой ситуацией не-садо-мазо и исключить нарушающий класс / пакет из встроенного файла JAR?
Фрагменты ПОМ:
зависимости:
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
<scope>provided</scope>
</dependency>
пачка плагин:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.6</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Export-Package>
/* application packages only */
</Export-Package>
<Private-Package>
/* application packages only */
</Private-Package>
<DynamicImport-Package>
*
</DynamicImport-Package>
<Import-Package></Import-Package>
<Include-Resource>
{maven-resources},target/classes/rebel.xml
</Include-Resource>
<Embed-Dependency>
/* other dependencies */
axis,
axis-jaxrpc;inline=true,
commons-discovery,
commons-logging
</Embed-Dependency>
</instructions>
</configuration>
</plugin>
Перефразируя... Есть ли способ сделать что-то вроде этого:
<Embed-Dependency>
axis-jaxrpc;inline=true;exclude=javax.namespace.QName
</Embed-Dependency>
РЕДАКТИРОВАТЬ:
Исключение для наглядности:
Вызывается: java.lang.LinkageError: нарушение ограничения загрузчика при инициализации интерфейса itable: при разрешении метода "org.apache.axis.message.MessageElement.getChildElements(Ljavax/xml/namespace/QName;)Ljava/util/Iterator;" загрузчик классов (экземпляр org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) текущего класса, org/apache/axis/message/MessageElement и загрузчик классов (экземпляр) для интерфейса javax/xml/soap/SOAPElement
1 ответ
Удалить axis-jaxrpc
от <Embed-Dependency>
и добавить пакеты из axis-jaxrpc
что вы заботитесь о <Private-Package>
раздел - они будут встроены в ваш пакет. Возможно, вам придется сделать то же самое для пакетов axis-jaxrpc
зависит от или добавить соответствующие пакеты зависимостей в <Embed-Dependency>