如何从Eclipse中的另一个插件调用插件方法?

时间:2015-12-22 10:56:03

标签: java eclipse plugins eclipse-plugin

我遇到以下情况:

我想扩展给定插件A的功能(我有它的源代码并通过运行项目作为Eclipse应用程序来启动它,它打开一个提供插件功能的新Eclipse IDE)和一个插件BI正在写作。

当我将其作为Java应用程序运行时,我的插件会运行。我们假设它只是在控制台中打印Hello World。我想要的是我可以调用插件A中的功能。

我做了什么:

  1. 我将插件B添加到插件中作为必需的插件。
  2. 我创建了一个实现Hello World-print的类的实例,并在插件A的方法中调用该函数(我也尝试使该方法静态并调用它而不创建导致完全相同错误的实例)。
  3. 我在插件B中创建了一个扩展点,并在插件A中将其添加为扩展。我只是在扩展点中设置ID和名称。
  4. 会发生什么:

    当应该创建插件B中的类的实例时,程序会因此错误而崩溃:

    java.lang.NoClassDefFoundError: de/name_of/plugin_b/package/ClassName
    [...]
    Caused by: java.lang.ClassNotFoundException: de.name_of.plugin_b.package.ClassName cannot be found by de.name_of.plugin_a.package_1.0.0.qualifier
    

    我想我错过了一些重要的东西 - 有人可以帮我解决它的问题吗?

    编辑2:

    我刚刚读到我必须添加"。"到类路径。好像这样解决了这个问题!谢谢你让我深入挖掘清单,greg!

    我现在得到了一个不同的错误,这似乎与我在创建插件时犯错有关,因为当我将插件B作为Java应用程序运行时我没有收到此错误。

    java.lang.NoSuchMethodError: org.apache.lucene.store.FSDirectory.open(Ljava/nio/file/Path;)Lorg/apache/lucene/store/FSDirectory;
    

    问题是,这个方法确实存在(参见lucene API here)。

    如清单所示,我将lucene-jars添加到插件B的依赖项中。

1 个答案:

答案 0 :(得分:1)

您需要在插件的Export-Package部分中包含其他插件使用的每个包。在MANIFEST.MF编辑器中,这是在“导出的包”部分的“运行时”选项卡上。

您无需使用扩展点即可完成此工作。