Plugin.xml 与 OSGi 规范有何关系?
How does the Plugin.xml relate to the OSGi Specification?
有几种方法可以在 Eclipse 中制定捆绑包依赖关系。我的问题是:"what is it all about?"、"Why does Eclipse use two different files (plugin.xml, manifest.mf)?"、"Does equinox also handle the Eclipse Extension mechanism or will it just handle OSGi related information?"。
据我了解,eclipse 在转向 Equinox 之前是否提供了扩展机制。扩展机制背后的想法是,开发人员可以定义精确的接口,从而在未来使用附加功能增强他们的 Eclipse RCP。此信息存储在 xml 文档中,"plugin.xml" 指定提供的扩展点和实现的扩展。
另一方面,Equinox 提供功能齐全的服务,这些服务现在已经实现并且可以被插件(如库)使用。这意味着功能已经存在并且可以在服务方面被捆绑使用。通过添加这些可选信息,OSGi 相关信息位于 MANIFEST.MF 中。不使用 OSGi 的应用程序不会考虑此信息,但由于该信息是可选的,因此将具有完整的功能。
如有错误请告知
在 Eclipse 3.0 之前,Eclipse 运行时有自己的模块概念和实现。 plugin.xml 用于声明扩展以及声明对其他插件的依赖性。
在 Eclipse 3.0 中,项目维护者决定使用 OSGi 来模块化 Eclipse,于是 Equinox 诞生了。它实现了 OSGi 规范,该规范也被扩展以提供从以前版本继承的 Eclipse 特性。
从那时起,每个插件也是一个 OSGi 包,但反之不一定。通常,每个插件和包也可以用作普通库,忽略包含在 jar 中的元数据。但是,在运行时,通常 plug-ins/bundles 没有用,因为它们依赖于 Equinox/OSGi 提供的基础设施。
因此如今,plugin.xml 文件仅包含扩展和扩展点,而 MANFIEST.MF 文件由 OSGi 运行时读取以获取 - 以及其他声明 - 依赖信息。
Equinox 项目提供了两个东西:
- OSGi 规范的实现,加上特定于 Eclipse 的附加内容
- Eclipse 平台和其他基于 Eclipse 的项目使用的核心库。
服务也是 OSGi 规范的一部分。从技术上讲,服务和扩展可以用作 入口点 platform/other 插件的功能。但是,由于历史原因,我认为大多数入口点都是以扩展点的形式提供的。
扩展点设计的一个目标是在不降低 Eclipse 在启动和运行时的性能的情况下管理大量扩展。因此,无需激活提供它们的插件的 OSGi 包即可读取扩展点和扩展。激活尽可能晚发生:当需要调用扩展提供的代码时。
这是否符合您的 questions/confirm 您的假设?
有几种方法可以在 Eclipse 中制定捆绑包依赖关系。我的问题是:"what is it all about?"、"Why does Eclipse use two different files (plugin.xml, manifest.mf)?"、"Does equinox also handle the Eclipse Extension mechanism or will it just handle OSGi related information?"。 据我了解,eclipse 在转向 Equinox 之前是否提供了扩展机制。扩展机制背后的想法是,开发人员可以定义精确的接口,从而在未来使用附加功能增强他们的 Eclipse RCP。此信息存储在 xml 文档中,"plugin.xml" 指定提供的扩展点和实现的扩展。
另一方面,Equinox 提供功能齐全的服务,这些服务现在已经实现并且可以被插件(如库)使用。这意味着功能已经存在并且可以在服务方面被捆绑使用。通过添加这些可选信息,OSGi 相关信息位于 MANIFEST.MF 中。不使用 OSGi 的应用程序不会考虑此信息,但由于该信息是可选的,因此将具有完整的功能。
如有错误请告知
在 Eclipse 3.0 之前,Eclipse 运行时有自己的模块概念和实现。 plugin.xml 用于声明扩展以及声明对其他插件的依赖性。
在 Eclipse 3.0 中,项目维护者决定使用 OSGi 来模块化 Eclipse,于是 Equinox 诞生了。它实现了 OSGi 规范,该规范也被扩展以提供从以前版本继承的 Eclipse 特性。
从那时起,每个插件也是一个 OSGi 包,但反之不一定。通常,每个插件和包也可以用作普通库,忽略包含在 jar 中的元数据。但是,在运行时,通常 plug-ins/bundles 没有用,因为它们依赖于 Equinox/OSGi 提供的基础设施。
因此如今,plugin.xml 文件仅包含扩展和扩展点,而 MANFIEST.MF 文件由 OSGi 运行时读取以获取 - 以及其他声明 - 依赖信息。
Equinox 项目提供了两个东西:
- OSGi 规范的实现,加上特定于 Eclipse 的附加内容
- Eclipse 平台和其他基于 Eclipse 的项目使用的核心库。
服务也是 OSGi 规范的一部分。从技术上讲,服务和扩展可以用作 入口点 platform/other 插件的功能。但是,由于历史原因,我认为大多数入口点都是以扩展点的形式提供的。
扩展点设计的一个目标是在不降低 Eclipse 在启动和运行时的性能的情况下管理大量扩展。因此,无需激活提供它们的插件的 OSGi 包即可读取扩展点和扩展。激活尽可能晚发生:当需要调用扩展提供的代码时。
这是否符合您的 questions/confirm 您的假设?