Плагин 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>

Другие вопросы по тегам