假定在Eclipse rcp应用程序中有两个插件P1和P2。
P1和P2都是通过不同的构建过程分别构建的
在我的情况下,取决于用户的选择,基本产品中只有p1,只有p2或两个插件都可用。
我想在两个插件都可用时在插件P1和P2之间交换数据,否则插件将使用它们自己的数据。
OSGI声明式服务在我的情况下是否可以正常工作,
我可以通过任何方式公开从插件P1和P2返回json或字符串的服务api可以使用它,而无需明确依赖它,我的意思是,插件p2仅应在p1存在时使用它,如果不存在,应该正常运行。
请注意。
当然,您可以具有可选的依赖关系-但我的建议是引入一个P3,以保留公共数据。使P1和P2依赖于该插件,然后从通用的“存储”插件无条件地检索数据。
如果要使P1依赖于P2(反之亦然),则需要将此依赖关系设置为可选,并且要引入两者的循环编译时依赖关系。解决这种循环的一种好方法是引入一个通用的第三模块,该模块可以满足通用需求。
感谢您的建议
我完全同意拥有一个通用插件将是理想选择。
但是就我们而言,我们有一个基础产品,但是不幸的是我们没有控制权,我的意思是我们可以将任何插件添加到基础存储库中。
插件P1和P2是2个不同的产品,它们彼此独立工作,但是具有可以相互补充的数据。如果插件p1已安装在基本产品上,并希望使用该数据来扩展p2中的现有视图,我们希望从插件p2进行api调用,否则仅显示p2数据。
我假设使用命令式服务,插件P2可以使用osgi规范api调用插件P1公开的api,而osgi规范api是eclipse标准插件的一部分,而无需在插件之间添加任何依赖关系P1和P2。请让我知道是否有任何选择可以实现这一目标。