是否可以创建自动发现彼此的 Eclipse 插件?
我正在开发一组需要在两种主要情况下运行的插件:
- 单独
- 相互配合。
当单独运行时,插件应该“正常工作”,但是当它们协同运行时,它们将共享一些相同的模型内容,并且其中一个插件应该向用户提供其他插件的列表以与之共享内容。例如:
Foo Plugin 检测到以下可以与其共享本体的插件:
[ ] 栏插件
[] Baz 插件
[ ] 不要分享
Eclipse 是否提供任何内部发布/检测方法来促进对其他插件的这种自动检测?
答案应该是通过声明式服务,它结合了 eclipse xml 扩展和 osgi POJO 服务的优点。像 osgi 服务这样隐式动态的东西,但像 eclipse 扩展一样“按需”加载。
eclipse3.3 于 2006 年推出,您将在本演示文稿中找到这些概念。
声明式服务提供了定义对其他服务的引用的选项。也可以指定引用的基数。基数使用两个数字指定,第一个数字 0 或 1 表示可选性,第二个数字 1 或 n 表示多重性。
在实践中,那些DS(声明式服务)并不容易使用,因为您必须访问 BundleContext,这意味着跟踪 BundleActivator,这并不总是那么容易......
如果您需要定义某种面向服务的组件模型,那么本演示文稿应该为您提供当今存在的不同替代方案,并详细说明那些“声明式服务”
发布 rcreswick 发现的与 DS 相关的内容:
好吧,OSGI 服务注册中心可以在运行时完成基于 pojo 的服务的共享,而不是插件本身。有几个选项可以促进这一点,例如直接编码到 OSGI API、声明式服务、Spring DM 和 iPojo(我相信还有其他的)。
您可能想查看白板模式作为完成动态观察者/可观察样式解决方案的一种方式。