如何在 OSGi 系统 classJ2SE 1.8 配置文件的路径上为包提供额外的 class

How to provide additional class for a package on OSGi system classpath for J2SE 1.8 profile

在 ee.j2se-1.8 中包含包 org.w3c.dom。

org.osgi.framework.system.packages = \
...
 org.w3c.dom,\
...

org.osgi.framework.bootdelegation = \
...
org.w3c.*,\
org.xml.*,\
....

包 xml-apis_1.4.1.20140905-131237.jar 包含相同的包 org.w3c.dom,但有一个重要的 class 更多... ElementTraversal.class 更多。

所以这是我的问题...

如何在我的 Equinox OSGi 运行时中提供缺失的 class?

您正在为人们不认真对待包裹这一事实而苦恼。我们在 jta API 中也有类似的问题。 VM下发的版本与特殊包下发的版本不一致

解决方案是将带有额外包的 JAR 包含在框架所在的 class 路径中。看起来您正在使用 bnd(很好!)所以它看起来像:

-runpath: xml-apis__xml-apis;version="[1.4.1,2.0.0)"

如果这是一个包含正确导出的包,那么您会自动将其导出为系统包。查看 at the packages in this bundle 似乎所有包都已经在 VM 的标准导出中。但是,如果您的 JAR 中有未由 VM 导出的包,则可以按如下方式添加它们:

 -runsystempackages: javax.xml.foo