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 构建脚本优化问题 )