1

我正在使用javassist的 HotSwap 功能,它需要类路径中的 tools.jar,所以我-cp tools.jar在启动我的 OSGi 应用程序时添加了。但是当我new HotSwap()在其中一个包的代码中时,

 java.lang.NoClassDefFoundError: com.sun.jdi.Bootstrap

被抛出。com.sun.jdi.Bootstrap在 tools.jar 中,我已经将它添加到类路径中,并且我验证了它是否有效,因为如果没有,以下代码将不起作用:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

HotSwapper 的 Classloader 无法加载类com.sun.jdi.Bootstrap?那为什么它在我的 Eclipse 环境中正常工作?(我将 tools.jar 添加到构建路径的库中)

关于为什么 NoClassDefFoundError,任何线索都值得赞赏。

4

2 回答 2

3

您必须确保系统捆绑包导出此包。例如,在 Felix 中,文件 jre.properties 定义了系统捆绑包导出的包。在那里添加包 com.sun.jdi,它应该可以工作。

在 Eclipse 中,这是在 config.ini 中完成的。您可以使用 org.osgi.framework.system.packages.extra= 定义要导出的其他包。我宁愿不使用 boodelegation=* 因为它也可能导出不需要的包。看:

http://www.eclipse.org/forums/index.php/m/734358/

http://wiki.eclipse.org/Equinox_Boot_Delegation

于 2012-06-30T16:02:35.040 回答
0

在 Equinox 中,您可以将引导委托设置*为获得对引导类中所有类的访问权限,有关详细信息,请参阅此 wiki。在 3.2 中,它osgi.compatibility.bootdelegation=true位于config.ini.

于 2012-07-01T08:32:55.510 回答