Eclipse 中的插件间通信

Posted

技术标签:

【中文标题】Eclipse 中的插件间通信【英文标题】:Inter-plugin communication in Eclipse 【发布时间】:2008-10-17 18:44:19 【问题描述】:

是否可以创建自动发现彼此的 Eclipse 插件?

我正在开发一组需要在两种主要情况下运行的插件:

个别 彼此一致。

当单独运行时,插件应该“正常工作”,但当它们协同运行时,它们将共享一些相同的模型内容,并且其中一个插件应该向用户提供其他插件的列表以与之共享内容。例如:

Foo 插件检测到以下内容 可以与之共享本体的插件:

[ ] 栏插件

[ ] Baz 插件

[ ] 不要分享

Eclipse 是否提供任何内部发布/检测方法来促进对其他插件的这种自动检测?

【问题讨论】:

【参考方案1】:

答案应该是通过Declarative Service,它结合了eclipse xml扩展和osgi POJO服务的优点。像 osgi 服务这样隐式动态的东西,但像 eclipse 扩展一样“按需”加载。

2006 年为 eclipse3.3 引入,您将在 this presentation 中找到这些概念。

声明式服务提供了定义对其他服务的引用的选项。也可以指定引用的基数。基数由两个数字指定,第一个数字 0 或 1 表示可选性,第二个数字 1 或 n 表示多重性。

实际上,那些DS (Declarative Services) 并不容易使用,因为您必须访问BundleContext,这意味着跟踪BundleActivator,which is not always easy...

如果您需要定义某种面向服务的组件模型,this presentation 应该为您提供当今存在的不同替代方案,并详细说明那些“声明式服务”


发布 rcreswick 发现的与 DS 相关的内容:

OSGi 入门:Introducing Declarative Services OSGi 入门:Declarative Services and Dependencies

【讨论】:

感谢您的信息。我正在处理链接并尝试吸收许多新术语,但到目前为止,这看起来 DS 可能是正确的……我只需要更好地理解它们即可确定。 实际上最后一个链接列出了可以实现相同目标的其他技术:IPojo 尤其看起来很有希望,但不如 DS(它是 OSGI R4 的一部分)那么标准 谷歌搜索有关声明式服务的更多信息将我带到本教程:第 1 期:eclipsezone.com/eclipse/forums/t96740.html 第 2 期:eclipsezone.com/eclipse/forums/t97690.rhtml 看起来正是我需要的东西。谢谢!【参考方案2】:

好吧,OSGI 服务注册可以在运行时完成基于 pojo 的服务的共享,而不是插件本身。有几个选项可以促进这一点,例如直接编码到 OSGI API、声明式服务、Spring DM 和 iPojo(我相信还有其他的)。

您可能希望查看白板模式,以作为完成动态观察者/可观察样式解决方案的一种方式。

【讨论】:

以上是关于Eclipse 中的插件间通信的主要内容,如果未能解决你的问题,请参考以下文章

如何调试并查看随着时间的推移存储到线程间通信插件的 FIFO 队列中的内容?

Android Gradle 插件组件化中的 Gradle 构建脚本实现 ④ ( 使用路由实现组件间通信 | 引入 ARoute 框架 | Gradle 构建脚本优化问题 )

11:高级篇 - CTK 事件管理机制(插件间通信)

Java进程间通信和线程间通信?

VC++ 进程间的通信

K8s网络插件flannel与calico