以下是我必须做的才能让这个工作。
我不得不将 com.sun.management 添加到系统包的 systemProperties 值中,因为我是 OSGI 的新手,所以我花了一段时间才弄清楚。我使用 maven-pax-plugin 所以我需要添加以下属性。默认情况下它不起作用的原因是 Equinox 我选择的 osgi 容器默认情况下不包括系统包中的 com.sun.* 包。
通过使用 bundle 0 命令查看系统捆绑包,这一点很明显,因为捆绑包 0 始终是系统捆绑包,这对我来说是新事物。
<param>--sp=com.sun.management</param>
添加此命令后,系统捆绑包包括 com.sun.management 和我的捆绑包部署没有问题。
默认情况下,Equinox 在 systemProperties 中不包含 com.sun 包的原因请参见此处。(直接调用 sun.* 包的 Java 程序不能保证在所有 Java 兼容的平台上都能工作。事实上,即使在同一平台上的未来版本中,这样的程序也不能保证工作。)
因此,您有两个选项可以将 com.sun 添加到 osgi 容器中。
解决方案 A':扩展包
这些充当片段;它们不是自己的捆绑包,而是附加到主机上。扩展包是一种特殊的片段,它只附加到系统包以提供框架的可选部分。可以使用这种机制来创建一个空扩展,它只声明所需的包,将加载留给它的托管包(在本例中为框架)。我没有选择这条路线,因为第二种选择实施起来更快。
解决方案 B:引导委派
我最终选择的选项是引导委托。这允许用户创建总是由框架父类加载器加载的“隐含”包,即使包没有提供正确的导入。我通过设置系统包来包含 com.sun.management 来实现。
请参阅以下出色的链接,该链接更详细地描述了整个问题。