4

我正在开发一个 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*

我的类路径的清单运行时选项有插件的根,所以我不知道出了什么问题!

4

2 回答 2

2

您的SampleHander课程在com.simple.plugin.handlers包中而不是com.simple.handlers包中。所以正确的代码是:

Class<?> cls = Class.forName("com.simple.plugin.handlers.SampleHandler");

您必须始终指定所需类的完整名。

于 2016-01-27T19:31:38.130 回答
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

于 2016-01-27T18:24:49.380 回答