eclipse - 在 2 个插件 Eclipse rcp 之间动态共享数据
问题描述
假设 eclipse rcp 应用程序中有两个插件 P1 和 P2 可用。
P1 和 P2 都是由不同的构建过程分别构建的
在我的场景中,根据用户的选择,基础产品中只有 p1、p2 或两个插件可用。
当两个插件都可用时,我想在插件 P1 和 P2 之间交换数据,否则插件将使用它们自己的数据。
OSGI 声明式服务在我的场景中能否正常工作?
有什么方法可以公开从插件 P1 返回 json 或字符串的服务 api,而 P2 可以在不依赖它的情况下使用它,我的意思是,插件 p2 应该只在 p1 存在时使用它,如果不存在,它应该作为普通的。
好心劝告。
编辑:谢谢你的建议
我完全同意拥有一个通用插件将是理想的。
但是在我们的例子中,我们有一个基础产品,不幸的是我们无法控制,我的意思是我们可以将任何插件添加到基础存储库。
插件 P1 和 P2 是 2 个不同的产品,它们彼此独立工作,但具有可以相互补充的数据。我们喜欢从插件 p2 进行 api 调用,如果插件 p1 安装在基础产品上并使用数据来增强 p2 中的现有视图,否则仅显示 p2 数据。
我假设,使用 declerative 服务,插件 P2 可以使用 osgi 规范 api 调用插件 P1 公开的 api,这些 api 是 eclipse 标准插件的一部分,而不会在插件 P1 和 P2 之间添加任何依赖关系。请让我知道是否有任何选项可以实现这一目标。
解决方案
当然,您可以有可选的依赖项——但我的建议是引入 P3,以保留公共数据。使 P1 和 P2 依赖于该插件,并无条件地从通用“存储”插件中检索数据。
如果您使 P1 依赖于 P2(反之亦然),则需要将此依赖项设为可选,并且您将引入两者的循环编译时依赖项。解决这种循环的一个好方法是引入一个通用的第三个模块,它只是实现了共同的需求。
编辑:回答您的评论 - 如果您让 P1 注册 P2 引用的服务,那么 P2 将依赖于 P1 的服务接口,除非您从公共 P3 注册一个两者都依赖的类。话虽如此,没有什么可以阻止您将任意 JRE 类注册为服务 - 这将是非常规且奇怪的 hack,但我想您可以将 HashMap 注册为服务。感觉不干净、有异味、很老套、很奇怪——你的代码的维护者可能会困扰你,但我想从技术上来说这是可能的。我是否说过我不建议这样做并且它很丑陋?
推荐阅读
- scala - 带有轮廓的文件上传时缺少参数类型
- flutter - 如何在flutter应用中实现类似“HTML的选框”的效果
- sql - 按多个列条件删除重复项
- vapid - 如何使用乏味的推送通知发送试运行通知
- python - 可以使用 xpath 获取特定表
- symfony - 防止 EntityManager 为一个实体而不是另一个实体
- python - 用于移动文件的 Python 脚本在 1486 个文件处停止
- php - 除法余数返回 2 零
- microservices - 将单体应用拆分为微服务时如何定义 API 网关 URL
- react-native - 在 react-native 中更新 redux 状态后重新渲染屏幕