我有一个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);
}
}
CodeException中的代码失败: org.eclipse.core.runtime.CoreException:插件TempPlugin5无法加载类com .....(这个实现具有扩展点的插件接口的类) 。 。 引起:java.lang.NoClassDefFoundError:com.IInterface
所有这些设置在运行以在Eclipse中调试这些插件并且加载了所有相关插件时工作正常,但在导出时在我的应用程序中用作插件jar时失败。
尝试远程调试,代码在此行中失败:
Object obj = ce[j].createExecutableExtension("ProperExtPointClass");
我试图寻找这种无法找到的问题。我觉得我在调试时缺少一些Eclispe可用的依赖项,但在导出的插件使用完整的应用程序时不可用。
总结一下:具有扩展点和接口的Plugin1。和PLugin2(取决于Plugin1)使用此扩展点,并实现plugin1的接口。根据Stacktrace:Plugin2无法看到Plugin1的界面。我在&#34;导出的包&#34;中有接口包。在&#34;运行时&#34; Plugin1的标签。
TIA。
答案 0 :(得分:0)
您的插件可能不包含正确的依赖项。调试时不会仔细检查依赖项,因此此问题会在发布版本中显示。
在您的插件MANIFEST.MF
中,您必须使用Require-Bundle
列出您所依赖的插件,或者您可以使用Import-Package
列出您所依赖的Java包。
您可以在“依赖关系”选项卡上的MANIFEST.MF编辑器中设置这些值。
另请注意,如果您的插件中包含任何额外的jar,则必须在bin.includes
文件的build.properties
部分中列出。