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

How to call a plugin method from another plugin in Eclipse?

我遇到以下情况:

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

我的插件 运行 当我 运行 它作为 Java 应用程序时。假设它只是在控制台中打印 Hello World。我想要的是我可以从插件 A 调用执行该操作的函数。

我做了什么:

  1. 我将我的插件 B 添加到插件 As Required Plugin-Ins。
  2. 我创建了一个 class 的实例,它实现了 Hello World-print 并在插件 A 的方法中调用该函数(我还尝试使该方法成为静态方法并在不创建实例的情况下调用它导致完全相同的错误)。
  3. 我在插件 B 中创建了一个扩展点,并将其作为扩展添加到插件 A 中。我只是在扩展点中设置了 ID 和名称。

会发生什么:

当应该创建插件 B 中 class 的实例时,程序崩溃并出现此错误:

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:

我刚读到我必须添加“。”到 class 路径。好像这样解决了问题!感谢你让我深入研究清单,格雷格!

我现在确实遇到了一个不同的错误,这似乎也与我在创建插件时犯的错误有关,因为当我 运行 插件 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 的依赖项中。

您需要在您的插件的 Export-Package 部分包含其他插件使用的每个包。在 MANIFEST.MF 编辑器中,它位于 'Exported Packages' 部分的 'Runtime' 选项卡上。

您不需要扩展点即可完成这项工作。