为什么我无法在运行时访问我的 Eclipse 插件的 类?
Why i cant access the classes of my Eclipse plugin at Runtime?
我正在开发一个 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*
我的类路径清单运行时选项有插件的根目录,所以我不知道出了什么问题!
每个 Eclipse 插件都使用自己的 class 加载器运行。因此,您将无法从其他包中动态加载任何 class。
针对此类问题,Eclipse osgi 中有一个Buddy 系统。您必须在 manifest.mf 文件中更改您的父项目伙伴政策:
Eclipse-BuddyPolicy: Registered
要使来自其他插件项目的 classes 对您的父项目可用,请将其添加到您的 manifest.mf 文件中。
Eclipse-RegisterBuddy: {NAME OF THE PARENT PLUGIN}
例如:
Eclipse-RegisterBuddy: de.myname.myplugin
现在您可以从这两个插件加载 class。
另见此处:
您的 SampleHander
class 在 com.simple.plugin.handlers
包中 而不是 在 com.simple.handlers
包中。所以正确的代码是:
Class<?> cls = Class.forName("com.simple.plugin.handlers.SampleHandler");
您必须始终指定所需 class 的完整 程序包 名称。
我正在开发一个 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*
我的类路径清单运行时选项有插件的根目录,所以我不知道出了什么问题!
每个 Eclipse 插件都使用自己的 class 加载器运行。因此,您将无法从其他包中动态加载任何 class。
针对此类问题,Eclipse osgi 中有一个Buddy 系统。您必须在 manifest.mf 文件中更改您的父项目伙伴政策:
Eclipse-BuddyPolicy: Registered
要使来自其他插件项目的 classes 对您的父项目可用,请将其添加到您的 manifest.mf 文件中。
Eclipse-RegisterBuddy: {NAME OF THE PARENT PLUGIN}
例如:
Eclipse-RegisterBuddy: de.myname.myplugin
现在您可以从这两个插件加载 class。
另见此处:
您的 SampleHander
class 在 com.simple.plugin.handlers
包中 而不是 在 com.simple.handlers
包中。所以正确的代码是:
Class<?> cls = Class.forName("com.simple.plugin.handlers.SampleHandler");
您必须始终指定所需 class 的完整 程序包 名称。