所以,我有一个安装的扩展(见http://docs.oracle.com/javase/tutorial/ext/basics/index.html),我可以在 Eclipse 中看到。
我编写了一个简单的 rcp 应用程序,它试图在这个扩展中创建一个类的实例。但是,尽管一切都可以编译,但在创建实例时我得到了 NoClassDefFoundError 。
我假设这与 OSGi 有关,因为我可以运行一个简单的 java 应用程序来创建实例。
任何建议将不胜感激。
谢谢
所以,我有一个安装的扩展(见http://docs.oracle.com/javase/tutorial/ext/basics/index.html),我可以在 Eclipse 中看到。
我编写了一个简单的 rcp 应用程序,它试图在这个扩展中创建一个类的实例。但是,尽管一切都可以编译,但在创建实例时我得到了 NoClassDefFoundError 。
我假设这与 OSGi 有关,因为我可以运行一个简单的 java 应用程序来创建实例。
任何建议将不胜感激。
谢谢
我找到了另一种解决方案,即使用 arg 将父类加载器设置为“ext”类加载器
osgi.parentClassloader=ext
除了我现在没有得到错误之外,还不确定这种更改的含义。
由于您的扩展类是由 JRE 提供的,因此它们需要由 OSGi 框架的系统包导出。
这可以通过将包添加到org.osgi.framework.system.packages.extra
属性来实现(您可以将其设置为系统属性并将其传递到框架中)。
完成此操作并且您的消费包具有在其 MANIFEST.MF 的 Import-Package 条目中列出的那些包,您应该能够访问这些类。
JRE 扩展几乎是 OSGi 的对立面——我很想知道你为什么要这样做?