了解Eclipse插件如何使用OSGi2011-10-21 IBM Scott DelapEclipse 和 OSGi 的关系,从 plugin.xml 到 manifest.mfEclipse 集成开发环境(IDE)和 Eclipse Rich Client Platform(RCP)应用程序的核心由 Open Services Gateway Initiative(OSGi)规范的实现驱动。本文通过描述对 Eclipse 平台而言插件是什么 ,并跟踪从 Eclipse V2.1 到今天基于 OSGi 的实现中插件的发展,阐明了 Eclipse 与 OSGi 的关系。 还解释了 OSGi manifest.mf 文件选项以及通过 Eclipse 提供的添加项。大多数 Java™ 编程语言开发人员通过作为 IDE 的功能认识了 Eclipse。Eclipse IDE 实际上由叫做插件 的交互式组件 的集合组成。这些插件组成了 IDE 的基础,它们还可用于创建其他桌面应用程序。创建基于 Eclipse 的 应用程序所需的最小插件集称为 Eclipse Rich Client Platform(RCP)。但是,插件本身不能启动。它 们需要在一个环境中启动和操作。Eclipse 使用 OSGi R4 规范的实现提供了该环境。因为 Eclipse 在本质上是由 OSGi 驱动的,因此必须了解 Eclipse 插件的概念与 OSGi 框架有什么关系。在 本文中,我将通过描述对 Eclipse 平台而言插件是什么来详细解释这种关系。然后,将描述在 Eclipse V2.1 平台到今天基于 OSGi 的实现中插件的发展。最后,将详细介绍应用于 Eclipse 插件的 OSGi 提供 的 manifest.mf 选项。插件是什么?Eclipse 联机帮助将插件定义为:“ 插件是为系统提供功能的代码和/或数据的结构化包。可以以代码库(带有公共 [应用程序接口] API 的 Java 类)、平台扩展甚至文档的形式来提供功能。插件可以定义扩展点、定义良好的位置,其他插件可 以在这些位置添加功能。”要注意的一个重点是插件以结构化方式提供功能。它们可以提供服务 (比如日志)或可用于用户界面(UI)的功能,比如编辑器。不管什么功能,所有插件都以相同的结构化 方式来定义。到 OSGi 的发展如前所述,Eclipse 使用 OSGi 作为插件系统的基础。但并 非总是如此。早期版本的 Eclipse 也设计为插件集合,而且 Eclipse 包括自己专用的插件系统来管理交 互。但是,随着 Eclipse IDE 要求的增长,必须需要一个更强壮的解决方案。这个新系统的基本要求包 括动态添加新插件和停止现有插件的能力。经过大量研究之后,Eclipse 创建者决定通过实现 OSGi 框架 规范替换专用的插件框架。OSGi 是服务平台的规范。Eclipse 提供了该规范的许多可用实现之一 ,并用作最新 OSGi R4 规范的参考实现。OSGi 是基于 Java 的框架,旨在用于需要长运行时间、动态更 新和对运行环境破坏最小的系统。起初,OSGi 旨在用于家庭自动化和家庭网关设备。最近,从手机到汽 车都发现了它的踪迹。在核心,OSGi 是一个组件和服务模型,如图 1 所示。OSGi 规范定义了一 个叫做绑定包 的模块化单位。(在下文中,除非特别指明,Eclipse 术语插件 和 OSGi 术语绑定包 可 交换使用,因为所有 Eclipse 插件现在都是 OSGi 绑定包。)OSGi 还提供了 Java Virtual Machine (JVM)级别的服务注册,该绑定包可用于发布、发现和绑定至服务。图 1. 主机操作系统、Java 和 OSGi 中层的交互