为什么我无法在运行时访问我的Eclipse插件的类?

时间:2016-01-27 18:09:38

标签: java eclipse eclipse-plugin runtime eclipse-classpath

我正在开发一个Eclipse插件com.simple.plugin,其结构如下: Plugin Structure

问题是在运行时我无法访问我自己的插件的类。 例如,如果我在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运行时选项有插件的根目录,所以我不知道出了什么问题!

2 个答案:

答案 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

现在,您可以从两个插件加载您的课程。

另见:

https://wiki.eclipse.org/Context_Class_Loader_Enhancements