`
Daogene
  • 浏览: 2386 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

了解 Eclipse 插件如何使用 OSGi

阅读更多
本文通过描述对 Eclipse 平台而言插件是什么,并跟踪从 Eclipse V2.1 到今天基于 OSGi 的实现中插件的发展,阐明了 Eclipse 与 OSGi 的关系。还解释了 OSGi manifest.mf 文件选项以及通过 Eclipse 提供的添加项。
清单 3. Manifest.mf

Manifest-Version: 1.0
Bundle-Name: %name
Bundle-SymbolicName: org.eclipse.pde.ui; singleton:=true
Bundle-Version: 3.1.0
Bundle-ClassPath: org.eclipse.pde.ui_3.1.0.jar
Bundle-Activator: org.eclipse.pde.internal.ui.PDEPlugin
Bundle-Vendor: %provider-name
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.ui.ide,
org.eclipse.ui.views,
org.eclipse.jface.text,
org.eclipse.ui.workbench.texteditor,
org.eclipse.ui.editors,
org.eclipse.ant.core,
org.eclipse.core.resources,
org.eclipse.debug.core,
org.eclipse.debug.ui,
org.eclipse.jdt.core,
org.eclipse.jdt.debug.ui,
org.eclipse.jdt.launching,
org.eclipse.jdt.ui,
org.eclipse.pde,
org.eclipse.pde.build,
org.eclipse.search,
org.eclipse.team.core,
org.eclipse.ui,
org.eclipse.update.core,
org.eclipse.ui.forms,
org.eclipse.ant.ui,
org.eclipse.jdt.junit,
org.eclipse.ui.intro,
org.eclipse.ui.cheatsheets,
org.eclipse.update.configurator,
org.eclipse.help.base
Bundle-ManifestVersion: 2
Eclipse-AutoStart: true
Export-Package: org.eclipse.pde.internal.ui;x-internal:=true,
org.eclipse.pde.internal.ui.build;x-internal:=true,

. . .

org.eclipse.pde.ui,
org.eclipse.pde.ui.internal.samples;x-internal:=true,
org.eclipse.pde.ui.templates

各种插件导入现在被指定为必需的绑定包,* 包导出已经替换为显式导出的包列表。

插件级的依赖关系改为需要显式导出和导入包的依赖关系,当 Eclipse 宣布这个消息时,曾引起大量骚动。主要抱怨的是缺乏已经存在于 Eclipse 早期版本中的 <export name="*"/> 的替代物。但是,该省略有许多原因。最重要的原因是从显式导入和导出中获得的速度收益。早期版本的 Eclipse 必须打开并浏览每个插件 jar 文件以确定它包含哪些类。不包括 * 导出还提供了一级保护来避免插件暴露不必要的类。插件开发人员必须进行专门选择来使插件中的功能可供外部使用。该限制允许内部包保留在内部。

OSGi 清单选项

OSGi R4 框架核心目前的规范草案几乎有 PDF 格式的 300 页。介绍该规范的每个部分超出了本文范围,但我将讨论 Eclipse 插件开发人员特别感兴趣的 OSGi manifest.mf 选项:

Bundle-Activator
该类用于启动和停止绑定包。在上面的示例插件中,指定了 org.eclipse.pde.internal.ui.PDEPlugin 类。该类扩展 org.eclipse.core.runtime.Plugin,实现了 BundleActivator 接口。
Bundle-ClassPath
该属性指定要用于绑定包的 CLASSPATH。该属性可以包含对绑定包 jar 文件中目录或 jar 文件的引用。可以使用句点指明绑定包的根。在示例 Eclipse PDE 绑定包中,指定了绑定包 jar 文件中的 org.eclipse.pde.ui_3.1.0.jar。如果将插件的源版本导入工作区中,导入过程将更改绑定包 CLASSPATH 以显示为 Bundle-ClassPath:,这允许插件的开发版本挑选已编译的绑定包类。
Bundle-Version
该属性指定绑定包的版本号。包导入和必需的绑定包规范可以包括绑定包版本号。
Export-Package
该属性指定要公共暴露给其他插件的所有包。
Import-Package
该属性指定要从必需插件中显式导入的所有包。默认情况下,必须为要启动的绑定包解析所有包。还可以将包导入指定为可选项,以支持包不存在的情况。显式导入的类在 Require-Bundle 插件中的包之前解析。
Require-Bundle
该属性指定要在给定绑定包中导入使用的绑定包及其已导出的包。指定的绑定包在显式包导入之后解析。
Eclipse 提供的其他清单选项



OSGi 规范包括的 manifest.mf 配置选项不提供 Eclipse 平台需要的所有功能。因此,Eclipse 创建者添加了多个扩展(还建议将它们包括在未来版本的 OSGi 规范中):

Export-Package 头扩展
Eclipse 具有两个 OSGi 解析器方法 —— default 和 strict,可以使用 osgi.resolver 属性指定它们。Eclipse 还包括对 Export-Package 属性的两个扩展 —— x-internal 和 x-friends,启用 Strict 模式时,会强制执行这两个扩展。
x-internal
该属性的默认值是 false。当使用该选项将内部包指定为 true 时,Eclipse PDE 禁止其使用。
x-friends
该选项类似于 x-internal,但允许特定绑定包使用具有该选项的已导出包。其他绑定包被禁止。x-internal 选项优先于 x-friends。
Eclipse-AutoStart
默认情况下,Eclipse 根据需要加载绑定包。因此,当导入绑定包包含的第一个类的绑定包需要这个类时,就会加载这些绑定包。将该值指定为 ?? 会导致 Eclipse 在启动时加载绑定包。还可以指定例外情况列表,它们是无需启动包含它们的绑定包就可以加载的类和资源。
Eclipse-PlatformFilter
该属性允许为要启动的绑定包指定必须等于 true 的条件。可以将下列信息包括在指定的表达式中:
osgi.nl,表示语言
osgi.os,表示操作系统
osgi.arch,表示架构
osgi.ws,表示窗口系统
展示如何使用该属性的一个示例是,在启动使用 SWT_AWT 桥的插件之前验证操作系统是否是 Mac OS X。(Standard Widget Toolkit(SWT)的 Mac OS X 实现当前不支持该功能。)
Eclipse-BuddyPolicy
该选项指定加载绑定包策略的类。通常,绑定包只在其内部类和从依赖绑定包中导入的内部类中具有可见性。在 Eclipse 新闻组中用来解释伙伴类加载的流行示例是 Hibernate。Hibernate 框架必须查看用户创建的而非 Hibernate 本身一部分的类和资源。这样的一种情况是当使用项目动态填充来自 Hibernate Query Language(HQL)查询的类时。默认情况下,Hibernate 将无法查看位于包含 Hibernate jar 文件的插件外部的类,而需要修改 Hibernate 插件以创建包含 Hibernate 地图不可接受的类的每个插件。
Eclipse 和 OSGi 的未来趋势

Eclipse 已经从使用 OSGi 中大大受益,获得了以动态方式管理组件生命周期的一个健壮的系统。新的使用方法每天都在被发掘,比如服务器层特征 servlet、JavaServer Pages 以及 Eclipse 样式插件中的其他 HTTP 资源。

Eclipse Foundation 已经决定在驱动 OSGi 规范向前发展的过程中扮演关键角色,以便于自己和其他人利用 OSGi。在从专用 Eclipse 插件框架转换到 OSGi 的过程中,对 OSGi 规范进行了许多添加,这些添加成了 OSGi R4 规范发行版的一部分。因此,Eclipse Equinox 项目已经成为不断发展的 OSGi 参考实现。该实现以及用于管理发展 OSGi 的 Java Specification Request(JSR) 291 的创建,保证了 Eclipse/OSGi 合作伙伴关系将在未来几年里不断取得成功。




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1518581

分享到:
评论

相关推荐

    OSGI 实例eclipse插件开发

    在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse插件。 首先,Eclipse是一个开放源代码的集成开发环境(IDE),它支持多种编程语言的开发,而OSGI则为Eclipse提供了一个强大的插件系统。通过OSGI,开发者可以...

    OSGI.rar_OSGI eclipse_eclipse osgi_java OSGI_osgi

    3. **Eclipse与OSGI**:Eclipse是如何基于OSGI构建的,每个插件如何作为OSGI Bundle运行,以及如何通过Eclipse插件系统利用OSGI的灵活性。 4. **模块化开发**:如何将应用程序分解为可独立升级的模块,降低耦合度,...

    org.eclipse.osgi_3.7.0.v20110613及源码

    Eclipse IDE本身就是一个基于OSGi的平台,各个插件作为独立的bundle进行管理。此外,Spring Dynamic Modules(Spring DM)和Apache Felix等开源项目也使用OSGi来构建可扩展的系统。 六、挑战与优势 尽管OSGi提供了...

    Eclipse插件开发学习笔记.pdf

    Eclipse插件开发学习笔记将带领我们深入了解Eclipse插件开发的方方面面。 首先,我们需要了解Eclipse插件的基础概念。在Eclipse中,插件主要由一系列的扩展点(Extension Points)组成,这些扩展点定义了插件可以...

    Eclipse插件开发学习笔记全篇+源码.rar

    本文将深入探讨Eclipse插件开发的相关知识点,结合提供的"全书分为4篇共24章"的学习笔记和源码,帮助你更全面地理解和实践Eclipse插件开发。 第一篇:基础篇 在这一篇中,你将学习到Eclipse插件开发的基础知识,...

    eclipse插件FileSync

    【Eclipse插件FileSync详解】 Eclipse是一款广泛使用的开源集成开发环境(IDE),它支持多种编程语言,如Java、C++、Python等。为了增强Eclipse的功能,开发者可以使用插件来扩展其特性。"FileSync"是专门为Eclipse...

    eclipse插件的使用

    Eclipse插件的使用极大地扩展了其功能,使得开发者能够根据自己的需求定制工作环境。以下将详细介绍Eclipse插件的使用及其相关知识点。 1. **Eclipse插件体系结构** Eclipse基于OSGi框架构建,其插件系统是其核心...

    Eclipse插件开发 第1篇到第4篇 开发基础 核心技术 高级进阶 综合实例 eclipse 插件安装方法.zip

    这一部分通常会介绍插件开发的基本概念,包括Eclipse插件体系结构、OSGi框架以及如何创建第一个Eclipse插件项目。开发者会学习到Plugin.xml文件的重要性,它是描述插件元数据的关键,包括插件依赖、提供的服务、激活...

    Eclipse插件开发教程PPT Eclipse插件开发教程PPT

    Eclipse插件开发教程PPT是针对开发者设计的一份详细教学材料,旨在帮助他们了解并掌握如何利用Eclipse平台进行插件开发,从而定制自己的开发环境。以下是基于这个教程的几个关键知识点: 1. **Eclipse插件体系结构*...

    Eclipse插件开发文档

    Eclipse是一款广泛使用的...总之,Eclipse插件开发是一项涉及多方面技能的任务,包括Java编程、理解OSGi、掌握Eclipse API以及XML配置。通过学习和实践,开发者可以创建出符合需求的个性化Eclipse环境,提升开发效率。

    Eclipse插件开发笔记源码

    这是Eclipse插件的核心配置文件,定义了插件的元数据,包括插件ID、版本号、依赖关系、提供的和使用的服务等。通过编辑此文件,开发者可以控制插件的行为和与其他插件的交互。 3. **RCP(Rich Client Platform)**...

    神州数码 Eclipse插件开发面试

    神州数码作为一家专注于IT服务的公司,可能会对Eclipse插件开发有深入的需求,因此在面试过程中,掌握Eclipse插件开发技术是非常重要的。下面将详细介绍Eclipse插件开发的相关知识点。 一、Eclipse插件体系结构 ...

    Eclipse插件开发系列

    理解OSGi的基本概念,如Bundle(模块)和Service(服务),是进行Eclipse插件开发的第一步。同时,Eclipse的插件系统基于Plug-in Development Environment (PDE),提供了一系列工具来简化开发流程。 二、创建...

    Eclipse插件开发 第1篇到第4篇 开发基础 核心技术 高级进阶 综合实例 eclipse 插件安装方法

    3. **扩展点(Extension Points)与扩展(Extensions)**:Eclipse插件通过定义和使用扩展点来实现功能的集成。开发者需要了解如何查找、定义和使用已有的扩展点。 4. **透视图(Perspectives)、视图(Views)、...

    eclipse插件开发---简单例子

    Eclipse插件基于OSGi框架,它允许开发者创建可复用的模块化组件,这些组件可以与其他Eclipse插件交互,以提供定制化的开发体验。 描述中的"入门级简单例子 明了清晰"提示我们,这些例子将特别适合初学者,旨在清晰...

    eclipse插件开发步步教你

    Eclipse插件是基于OSGi模块系统构建的,每个插件都是一个独立的模块,它们通过声明依赖关系互相协作。开发者需要创建一个`plugin.xml`文件来定义插件的元数据,包括插件ID、版本、依赖项以及提供的服务和扩展点。 ...

    自定义eclipse插件

    1. **插件项目结构**:Eclipse插件开发基于OSGi框架,通常包含`.plugin.xml`配置文件、源代码、资源文件等。`.plugin.xml`定义了插件的基本信息和提供的服务。 2. **插件开发工具**:Eclipse本身提供了插件开发环境...

    eclipse插件开发指南 作者:陈刚

    Eclipse插件基于OSGi框架,每个插件都是一个独立的模块,通过提供服务和使用其他插件的服务来实现功能扩展。插件之间通过接口进行通信,这种模块化的设计使得插件可以灵活地添加、更新或移除,而不会影响到整个系统...

    Eclipse插件开发方法与实战

    本书《Eclipse插件开发方法与实战》深入探讨了如何利用Eclipse平台进行插件开发,为开发者提供了详尽的指导。下面,我们将详细讨论Eclipse插件开发的相关知识点。 1. **Eclipse插件体系结构**: - Eclipse采用插件...

Global site tag (gtag.js) - Google Analytics