在OSGi Bundle中使用受限制的类

时间:2014-02-18 20:27:36

标签: osgi

要使用端点使用SSL发布,我需要访问包com.sun.net.httpserver.*

下的类

使用Eclipse IDE我找到了一种使用这个类的方法。但导出捆绑并在另一个equinox OSGi安装中运行它我无法启动捆绑抛出以下错误:

java.lang.NoClassDefFoundError: com/sun/net/httpserver/HttpsConfigurator

任何人都有想法如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:6)

您所指的包是JDK的一部分。您需要公开它,使其在OSGi中可用,您有两个选择:

第一个,在大多数情况下是首选选项,是通过系统包公开此包。 OSGi框架有一个属性,您可以设置为执行此操作:

org.osgi.framework.system.packages.extra=...

作为其值,您可以在框架已公开的包之外为其提供以逗号分隔的包列表。在您的情况下,至少com.sun.net.httpserver,但可能有更多的包需要。在这种情况下,还要确保使用此软件包的软件包导入此软件包。

第二种选择是使用一种使用引导委派的机制。它应该只作为最后的手段,因为它打破了模块化,如果不仔细使用它可能会导致其他问题。同样,这是您需要设置的属性:

org.osgi.framework.bootdelegation=*

在这里,您可以提供一个以逗号分隔的包列表,这些包应该由引导类加载器加载。支持通配符(如上例所示),但我们鼓励您尽可能具体,因此在您的情况下,例如使用com.sun。*作为值。