我正在使用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,任何线索都被赞赏。
答案 0 :(得分:3)
您必须确保系统捆绑包导出此包。例如,在Felix中,文件jre.properties定义了系统包导出的包。在那里添加com.sun.jdi包,它应该可以工作。
在eclipse中,这是在config.ini中完成的。您可以使用org.osgi.framework.system.packages.extra =来定义要导出的其他包。我宁愿不使用boodelegation = *,因为它也可能导出不需要的包。参见:
答案 1 :(得分:0)
在Equinox中,您可以将引导委派设置为*
以访问引导类中的所有类,有关详细信息,请参阅this wiki。在3.2中,osgi.compatibility.bootdelegation=true
中的config.ini
。