Eclipse插件扩展点和扩展仅在调试环境

时间:2017-09-09 07:19:12

标签: java eclipse eclipse-plugin

我有一个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。

1 个答案:

答案 0 :(得分:0)

您的插件可能不包含正确的依赖项。调试时不会仔细检查依赖项,因此此问题会在发布版本中显示。

在您的插件MANIFEST.MF中,您必须使用Require-Bundle列出您所依赖的插件,或者您可以使用Import-Package列出您所依赖的Java包。

您可以在“依赖关系”选项卡上的MANIFEST.MF编辑器中设置这些值。

另请注意,如果您的插件中包含任何额外的jar,则必须在bin.includes文件的build.properties部分中列出。