以下是我为了得到这个工作所必须做的。
我不得不将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包的原因见here。 (一个直接调用sun程序包的Java程序并不能保证可以在所有Java兼容的平台上运行,事实上,即使在同一平台的未来版本中,这样的程序也不能保证能正常工作。)
所以你有两个选项可以将com.sun添加到osgi容器中。
解决方案A':扩展束
这些作为片段;它们不是自己的捆绑,而是附属于主机。扩展束是一种特殊类型的片段,仅附加到系统包,以便提供框架的可选部分。我们可以使用这种机制来创建一个空的扩展,它只声明所需的包,并将加载留给它的托管包(在这种情况下为框架)。由于第二种方案实施起来更快,我没有选择这条路线。
解决方案B:启动代表团
我在年底拍得的选择是启动代表团。这允许用户创建“隐含”的包,这些包将始终由框架父类加载器加载,即使这些包没有提供正确的导入。我通过设置系统包来包含com.sun.management来实现。
请参阅以下优秀的link,以更详细地描述整个问题。
感谢VonC对不起,我正在尝试解决依赖性问题。该软件包在rt.jar中,它是jre lib的一部分,所以我很谨慎地包装它,但我会放弃它并在这里报告。 – 2010-04-14 07:24:48
@Paul:在封装rt.jar之前,也许这个线程也可以提供帮助:http://www.mail-archive.com/[email protected]/msg00518.html – VonC 2010-04-14 07:36:50
非常感谢链接指向我在正确的方向上,我添加了以下关于com.sun包默认不包含的原因的详细信息。 – 2010-04-14 14:42:17