我需要在OSGi捆绑包中使用一个Apache库(axis-jaxrpc
),但它的缺陷在于它的jar包含来自Java内置插件(javax.xml.namespace.QName
)的类。我不能用任何其他替代方法替换它-这是...的另一种依赖关系的侧依赖...
问题是,每当我捆包并启动它时,它就可以正常启动。但是,如果我触摸与jaxrpc
相关的任何功能,则会收到LinkageError,声称QName
已由<bootloader>
加载。
在启动应用程序之前,我设法将jaxrpc
jar爆炸到我的束jar中,并手动删除了javax.namespace目录(即,编辑束jar内容)。那成功了-我不再得到LinkageError。
现在的问题是...我该如何以一种非sado-maso的方式处理这种情况,并从嵌入式jar文件中排除有问题的类/程序包?
POM片段:
依赖项:
<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:接口可迭代初始化中的加载程序约束违规:当解析方法“ 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的类加载器(的实例)
最佳答案
从axis-jaxrpc
中删除<Embed-Dependency>
,并将您要关注的axis-jaxrpc
中的软件包添加到<Private-Package>
部分中-这些软件包将嵌入到您的捆绑软件中。您可能需要对axis-jaxrpc
所依赖的程序包执行相同的操作,或者将相应的依赖项束添加到<Embed-Dependency>