2个插件之间动态共享数据 Eclipse rcp

Dynamic sharing of data between 2 Plugins Eclipse rcp

假设在 eclipse rcp 应用程序中有两个插件 P1 和 P2 可用。

P1 和 P2 都是通过不同的构建过程分别构建的

在我的场景中,根据用户的选择,只有 p1,只有 p2 或两个插件在基本产品中可用。

我想在插件 P1 和 P2 都可用时交换数据,否则插件将使用它们自己的数据。

OSGI 声明式服务在我的场景中是否运行良好,

有什么方法可以让我公开服务 api 的 return json 或来自插件 P1 和 P2 的字符串可以使用它而不需要明确地依赖它,我意思是,插件 p2 应该只在 p1 存在时使用它,如果不存在,它应该正常运行。

多多指教

编辑: 谢谢你的建议

我完全同意拥有一个通用插件是最理想的。

但是在我们的例子中,我们有一个基础产品,不幸的是我们无法控制,我的意思是我们可以将任何插件添加到基础存储库。

Plugin P1 和 P2 是 2 个不同的产品,它们彼此独立工作,但具有可以相互补充的数据。我们喜欢从插件 p2 进行 api 调用,如果插件 p1 安装在基础产品上并使用数据来增加 p2 中的现有视图,否则仅显示 p2 数据。

我假设,使用 declerative 服务,插件 P2 可以使用 osgi 规范 api 调用插件 P1 公开的 api,它们是 eclipse 标准插件的一部分,而无需在两者之间添加任何依赖关系插件 P1 和 P2。如果有任何选项可以实现此目的,请告诉我。

当然,您可以有可选的依赖项 - 但我的建议是引入 P3,以保留公共数据。使 P1 和 P2 依赖于该插件,并从通用 "storage" 插件中无条件地检索数据。

如果您使 P1 依赖于 P2(反之亦然),则需要将此依赖性设为可选,并且您将引入两者的循环编译时依赖性。解决这种循环的一个好方法是引入一个只实现共同需求的共同第三个模块。

编辑:回答您的意见 - 如果您让 P1 注册 P2 引用的服务,那么 P2 将依赖于 P1 的服务接口,除非您从公共 P3 注册 class两者都依赖。话虽这么说,没有什么能阻止您将任意 JRE classes 注册为服务——这将是非常规的和奇怪的 hack,但我想您可以将 HashMap 注册为服务。它感觉不干净、有异味、古怪和怪异——你的代码的维护者可能会困扰你,但我想从技术上讲这是可能的。我说过我不推荐它而且它很丑吗?