我正在开发一个Eclipse插件com.simple.plugin
,其结构如下:
问题是在运行时我无法访问我自己的插件的类。 例如,如果我在SampleHandler.java中执行以下代码:
Class cls = Class.forName("com.simple.handlers.SampleHandler");
Object obj = cls.newInstance();
我收到错误:
java.lang.ClassNotFoundException: com.simple.handlers.SampleHandler cannot be found by com.simple.plugin_1.0.0.qualifier*
classpath的manifest运行时选项有插件的根目录,所以我不知道出了什么问题!
答案 0 :(得分:2)
您的SampleHander
课程位于com.simple.plugin.handlers
包 com.simple.handlers
包中。所以正确的代码是:
Class<?> cls = Class.forName("com.simple.plugin.handlers.SampleHandler");
您必须始终指定所需课程的完整包名称。
答案 1 :(得分:1)
Eclipse插件使用自己的类加载器运行每个插件。因此,您将无法动态加载其他包中的任何类。
对于这类问题,Eclipse osgi中有一个Buddy系统。您必须在manifest.mf文件中更改父项目伙伴策略:
Eclipse-BuddyPolicy: Registered
要使其他插件项目中的类对您的父项目可用,请将其添加到manifest.mf文件中。
Eclipse-RegisterBuddy: {NAME OF THE PARENT PLUGIN}
例如:
Eclipse-RegisterBuddy: de.myname.myplugin
现在,您可以从两个插件加载您的课程。
另见: