我已经在classpath中添加了tools.jar,为什么还要抛出java.lang.NoClassDefFoundError:com.sun.jdi.Bootstrap?

时间:2012-06-30 15:19:10

标签: osgi classloader javassist

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

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

被抛出。 com.sun.jdi.Bootstrap位于tools.jar中,我已经在classpath中添加了它,并且我验证它是否有效,因为如果没有,以下代码将无效:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

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

为什么NoClassDefFoundError,任何线索都被赞赏。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在Equinox中,您可以将引导委派设置为*以访问引导类中的所有类,有关详细信息,请参阅this wiki。在3.2中,osgi.compatibility.bootdelegation=true中的config.ini

相关问题