Plugin.xml 与 OSGi 规范有何关系?
Posted
技术标签:
【中文标题】Plugin.xml 与 OSGi 规范有何关系?【英文标题】:How does the Plugin.xml relate to the OSGi Specification? 【发布时间】:2017-04-27 13:27:12 【问题描述】:有几种方法可以在 Eclipse 中制定包依赖关系。我的问题是:“这到底是怎么回事?”、“为什么 Eclipse 使用两个不同的文件(plugin.xml、manifest.mf)?”、“Equinox 是否也处理 Eclipse 扩展机制,还是只处理 OSGi 相关信息?”。 据我了解,eclipse 在转移到 Equinox 之前是否提供了扩展机制。扩展机制背后的想法是开发人员可以定义精确的接口,从而在未来通过附加功能增强他们的 Eclipse RCP。此信息存储在 xml 文档“plugin.xml”中,指定提供的扩展点和实现的扩展。
另一方面,Equinox 提供功能齐全的服务,这些服务现在已实现并可被插件(如库)使用。这意味着功能已经存在,并且可以在服务方面由捆绑包使用。通过添加这些可选信息,OSGi 相关信息位于 MANIFEST.MF 中。不使用 OSGi 的应用程序不会考虑此信息,但由于该信息是可选的,因此将完全正常工作。
如果我错了,请告诉我。
【问题讨论】:
目前还不清楚您的实际问题是什么。 Stack Overflow 是针对特定的编程问题而不是广泛的讨论。扩展点由不属于 Equinox 的扩展点注册表管理。 如果您认为某个答案解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的旧帖子上。 【参考方案1】:在 Eclipse 3.0 之前,Eclipse 运行时有自己的模块概念和实现。 plugin.xml 用于声明扩展以及声明对其他插件的依赖关系。
在 Eclipse 3.0 中,项目维护者决定使用 OSGi 对 Eclipse 进行模块化,于是 Equinox 诞生了。它实现了 OSGi 规范,该规范还被扩展以提供从以前版本继承的 Eclipse 特性。
从那时起,每个插件也是一个 OSGi 包,但不一定反之亦然。通常,每个插件和包也可以用作普通库,忽略 jar 中包含的元数据。但是,在运行时,插件/捆绑包通常没有用处,因为它们依赖于 Equinox/OSGi 提供的基础架构。
因此,如今,plugin.xml 文件仅包含扩展和扩展点,而 MANFIEST.MF 文件由 OSGi 运行时读取以获取 - 除其他声明外 - 依赖信息。
Equinox 项目提供了两件事:
OSGi 规范的实现,以及特定于 Eclipse 的附加功能 Eclipse 平台和其他基于 Eclipse 的项目使用的核心库。服务也是 OSGi 规范的一部分。从技术上讲,服务和扩展都可以用作平台/其他插件功能的入口点。但是,由于历史原因,我认为大多数入口点都是以扩展点的形式提供的。
扩展点设计的一个目标是在不降低 Eclipse 在启动和运行时的性能的情况下管理大量扩展。出于这个原因,在不激活提供它们的插件的 OSGi 包的情况下读取扩展点和扩展。激活尽可能晚:当需要调用扩展提供的代码时。
这是否回答了您的问题/证实了您的假设?
【讨论】:
以上是关于Plugin.xml 与 OSGi 规范有何关系?的主要内容,如果未能解决你的问题,请参考以下文章