我的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:接口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的类加载器(实例)
答案 0 :(得分:0)
从axis-jaxrpc
移除<Embed-Dependency>
并将您关注的axis-jaxrpc
个软件包添加到<Private-Package>
部分 - 这些软件包将嵌入您的软件包中。您可能需要对包axis-jaxrpc
依赖的包执行相同操作,或将相应的依赖包添加到<Embed-Dependency>