【发布时间】:2017-09-09 16:18:23
【问题描述】:
我有一个 Eclipse 插件并创建了一个新的扩展点,所有设置都显示在链接中:http://www.vogella.com/tutorials/EclipseExtensionPoint/article.html
现在使用这个扩展点创建了一个带有扩展的新插件,也显示在上面的链接中。现在,当我在调试环境中运行它时,一切正常,但是当我将这两个插件从 Eclipse 导出到插件 jar 文件并与我的应用程序一起使用时,它会失败。
这是我从 Eclipse 网站获取插件信息的代码:
IExtensionRegistry reg = Platform.getExtensionRegistry();
IExtensionPoint ep = reg.getExtensionPoint("com.proper.package.ProperExtPointId");
IExtension[] extensions = ep.getExtensions();
contributors = new ArrayList();
for (int i = 0; i < extensions.length; i++)
{
IExtension ext = extensions[i];
IConfigurationElement[] ce =
ext.getConfigurationElements();
for (int j = 0; j < ce.length; j++)
{
Object obj = ce[j].createExecutableExtension("ProperExtPointClass");
contributors.add(obj);
}
}
代码在 CoreException 中失败: org.eclipse.core.runtime.CoreException: Plug-in TempPlugin5 was unable to load class com.....(该类实现了具有扩展点的插件接口) . . 引起:java.lang.NoClassDefFoundError: com.IInterface
所有这些设置在 Eclipse 中运行以调试这些插件并加载所有依赖插件时工作正常,但在导出以用作我的应用程序中的插件 jar 时失败。
试过remotedebugging,代码在这一行失败:
Object obj = ce[j].createExecutableExtension("ProperExtPointClass");
我试图寻找这种问题都找不到。我觉得我缺少一些 Eclispe 在调试时可用但在导出插件以使用完整应用程序时不可用的依赖项。
总而言之:具有扩展点和接口的插件 1。而PLugin2(依赖Plugin1)就是使用这个Extension point,实现plugin1的接口。根据 Stacktrace:Plugin2 无法看到 Plugin1 的接口。我在 Plugin1 的“runtime”选项卡的“Exported packages”中有 Interface 的包。
TIA。
【问题讨论】:
-
你有没有尝试过干净的重建,我不知道为什么,但很多时候当我收到
NoClassDefFoundError时,构建中的某些东西会被破坏 -
感谢您的帮助。是的,我已经尝试过彻底清洁。我不工作。
标签: java eclipse eclipse-plugin