- 浏览: 146480 次
- 性别:
- 来自: 南阳
文章分类
最新评论
-
caoshiyu2008:
请问这个问题如何解决的?
2010年7月29号--关于一个文件读取错误的问题 -
AquariusM:
做事情 先动脑子后动手 哈哈
写在四个月的工作生活之后。。。 -
AquariusM:
因为这本书 最近情绪上非常低落没有干劲还好会去参加海涛的婚礼 ...
《遇见未知的自己》----关于我 2011年4月24日 -
AquariusM:
连接池技术我也不是太熟悉只是在项目中用到了 来优化项目连接速度 ...
2010年8月25号---数据库连接池之---bonecp简单连接池的创建和使用 -
haiyangyiba:
朋友,最后一句
connectionPool.shutdown ...
2010年8月25号---数据库连接池之---bonecp简单连接池的创建和使用
转载自IBM官方文档:http://www.ibm.com/developerworks/cn/opensource/os-ecl-osgi/index.html
Eclipse 和 OSGi 的关系,从 plugin.xml 到 manifest.mf
简介: Eclipse 集成开发环境(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)的功能,比如编辑器。不管什么功能,所有插件都以相同的结构化方式来定义。
如前所述,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 中层的交互
OSGi 规范定义了绑定包生命周期的基础架构和绑定包的交互方式。这些规则通过使用特殊 Java 类加载器来强制执行。在一般 Java 应用程序中,CLASSPATH 中的所有类都对所有其他类可见。相反,OSGi 类加载器基于 OSGi 规范和每个绑定包的 manifest.mf 文件中指定的选项(稍后将详细介绍)来限制类交互。
Eclipse IDE 使用围绕模块化和绑定包生命周期的一个 OSGi 子集。但是,它最低限度地使用了 OSGi 提供的服务支持。相反,Eclipse 提供自己的扩展点系统来启用绑定包交互。绑定包将功能暴露给其他扩展。绑定包还定义自己的扩展点,允许其他绑定包向其贡献功能。使用 Eclipse 中扩展点的一个示例是 Preferences 窗口。核心 Eclipse 插件提供中央窗口,并暴露扩展点以允许其他首选项页面的贡献。当插件添加到 Eclipse 中时,它们可以贡献它们自己的页面。Eclipse 中扩展点的模型不同于基本的 OSGi 服务。绑定包扩展点由定义绑定包拥有;其他绑定包只对这些点做贡献。相反,任何绑定包可以实现和使用 OSGi 服务。
在 3.1 之前版本的 Eclipse 中,在每个插件的 plugin.xml 文件中定义插件依赖关系以及扩展和扩展点。在使用 OSGi 的新版本 Eclipse 中,依赖关系信息被分解到 manifest.mf 文件中,而 plugin.xml 文件只包含扩展和扩展点的 XML 定义。看一个演示该发展的生动的工作示例十分有用。清单 1 展示了 Eclipse V3.0 中 org.eclipse.pde.ui 插件的代码段。
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.0"?> <plugin id="org.eclipse.pde.ui" name="%name" version="3.0.2" provider-name="%provider-name" class="org.eclipse.pde.internal.ui.PDEPlugin"> <runtime> <library name="pdeui.jar"> <export name="*"/> </library> </runtime> <requires> <import plugin="org.eclipse.core.runtime.compatibility"/> <import plugin="org.eclipse.ui.ide"/> <import plugin="org.eclipse.ui.views"/> <import plugin="org.eclipse.jface.text"/> <import plugin="org.eclipse.ui.workbench.texteditor"/> <import plugin="org.eclipse.ui.editors"/> <import plugin="org.eclipse.ant.core"/> <import plugin="org.eclipse.core.resources"/> <import plugin="org.eclipse.debug.core"/> <import plugin="org.eclipse.debug.ui"/> <import plugin="org.eclipse.help.base"/> <import plugin="org.eclipse.jdt.core"/> <import plugin="org.eclipse.jdt.debug.ui"/> <import plugin="org.eclipse.jdt.launching"/> <import plugin="org.eclipse.jdt.ui"/> <import plugin="org.eclipse.pde"/> <import plugin="org.eclipse.pde.build"/> <import plugin="org.eclipse.search"/> <import plugin="org.eclipse.team.core"/> <import plugin="org.eclipse.ui"/> <import plugin="org.eclipse.update.core"/> <import plugin="org.eclipse.ui.forms"/> <import plugin="org.eclipse.ant.ui"/> <import plugin="org.eclipse.jdt.junit"/> <import plugin="org.eclipse.ui.intro"/> <import plugin="org.eclipse.ui.cheatsheets"/> </requires> <!-- Extension points --> <extension-point id="pluginContent" name="%expoint.pluginContent.name" schema="schema/pluginContent.exsd"/> <extension-point id="newExtension" name="%expoint.newExtension.name" schema="schema/newExtension.exsd"/> <extension-point id="templates" name="%expoint.templates.name" schema="schema/templates.exsd"/> <extension-point id="samples" name="%expoint.samples.name" schema="schema/samples.exsd"/> <!-- Extensions --> <extension point="org.eclipse.ui.perspectives"> <perspective name="%perspective.name" icon="icons/eview16/plugins.gif" class="org.eclipse.pde.internal.ui.PDEPerspective" id="org.eclipse.pde.ui.PDEPerspective"> </perspective> </extension>
<export name="*"/>
声明暴露了插件中的所有包以供其他插件使用。插件依赖关系导入部分列出了 org.eclipse.pde.ui 插件需要的必备插件。
接下来两部分定义了 org.eclipse.pde.ui 可用于其他插件的扩展点以及它对其他插件的贡献。在本例中,可以看到自定义 Eclipse Plug-in Development Environment(PDE)视图的定义。
下面来看 Eclipse V3.1 中的同一插件定义。清单 2 展示了 plugin.xml 文件。
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.0"?> <plugin> <!-- Extension points --> <extension-point id="pluginContent" name="%expoint.pluginContent.name" schema="schema/pluginContent.exsd"/> <extension-point id="newExtension" name="%expoint.newExtension.name" schema="schema/newExtension.exsd"/> <extension-point id="templates" name="%expoint.templates.name" schema="schema/templates.exsd"/> <extension-point id="samples" name="%expoint.samples.name" schema="schema/samples.exsd"/> <!-- Extensions --> <extension point="org.eclipse.ui.perspectives"> <perspective name="%perspective.name" icon="icons/eview16/plugins.gif" class="org.eclipse.pde.internal.ui.PDEPerspective" id="org.eclipse.pde.ui.PDEPerspective"> </perspective>注意,导出和导入信息不见了。该信息现在位于清单 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 R4 框架核心目前的规范草案几乎有 PDF 格式的 300 页。介绍该规范的每个部分超出了本文范围,但我将讨论 Eclipse 插件开发人员特别感兴趣的 OSGi manifest.mf 选项:
Bundle-Activator
org.eclipse.pde.internal.ui.PDEPlugin
类。该类扩展org.eclipse.core.runtime.Plugin
,实现了 BundleActivator
接口。Bundle-ClassPath
Bundle-ClassPath:
,这允许插件的开发版本挑选已编译的绑定包类。Bundle-Version
Export-Package
Import-Package
Require-Bundle
伙伴类加载器选项
首先为 Hibernate 创建插件。然后创建一个插件,其中包含与 Hibernate 有依赖关系的特定于域的类。将下列行添加到 Hibernate 插件清单中:Eclipse-BuddyPolicy: registered
。
将下列清单属性添加到包含特定于域的类或资源的插件清单中: Eclipse-RegisterBuddy: hibernate
。
该行允许插件通过声明将自己暴露给 Hibernate 插件,而它预先并不知道这些插件。现在,Hibernate 插件可以看到需要的类,虽然它并没有专门导入它们。
OSGi 规范包括的 manifest.mf 配置选项不提供 Eclipse 平台需要的所有功能。因此,Eclipse 创建者添加了多个扩展(还建议将它们包括在未来版本的 OSGi 规范中):
Export-Package
头扩展default
和 strict
,可以使用 osgi.resolver
属性指定它们。Eclipse 还包括对Export-Package
属性的两个扩展 —— x-internal
和 x-friends
,启用 Strict 模式时,会强制执行这两个扩展。x-internal
x-friends
x-internal
,但允许特定绑定包使用具有该选项的已导出包。其他绑定包被禁止。x-internal
选项优先于 x-friends
。Eclipse-AutoStart
Eclipse-PlatformFilter
-
osgi.nl
,表示语言 -
osgi.os
,表示操作系统 -
osgi.arch
,表示架构 -
osgi.ws
,表示窗口系统
SWT_AWT
桥的插件之前验证操作系统是否是 Mac OS X。(Standard Widget Toolkit(SWT)的 Mac OS X 实现当前不支持该功能。)Eclipse-BuddyPolicy
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 合作伙伴关系将在未来几年里不断取得成功。
发表评论
-
rcp新建工程没有图标的问题解决方案
2011-12-21 00:52 3815这几天因为北京的项目开展,平台加入了java开发模式,因此工具 ... -
Doclet 概述(转载)
2011-12-13 13:38 4136转载自:http://hi.baidu.c ... -
eclipse插件开发之控制台输出乱码问题
2011-12-02 11:56 3058首先建立自己的console控制台网上有很多这种例子,java ... -
关于Eclipse构建器(转载)
2011-11-01 21:30 6163链接地址:http://space.itpub.net/130 ... -
关于编辑器Dirty的处理
2011-10-26 00:11 2372今天开始做些小的总结,因为Eclipse插件方面做了不少东西了 ... -
Swt/Jface treeViewer的使用 (转载)
2011-10-23 23:51 2188转载自:http://www.cnblogs.com/huqi ... -
Swt/Jface treeViewer的使用 (转载)
2011-10-23 23:50 1066<!-- [if gte mso 9]><x ... -
GEF -- 学习一下调色板,我们不知道的东西(三)影子武士Tracker
2011-09-23 10:54 923http://www.cnblogs.com/wayne_wa ... -
(转载)Eclipse GEF 开发之:当图形editor被更改时Enable "Save" action
2011-07-08 17:46 1968原文链接:http://blog.csdn.net/zhmz1 ...
相关推荐
在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse插件。 首先,Eclipse是一个开放源代码的集成开发环境(IDE),它支持多种编程语言的开发,而OSGI则为Eclipse提供了一个强大的插件系统。通过OSGI,开发者可以...
3. **Eclipse与OSGI**:Eclipse是如何基于OSGI构建的,每个插件如何作为OSGI Bundle运行,以及如何通过Eclipse插件系统利用OSGI的灵活性。 4. **模块化开发**:如何将应用程序分解为可独立升级的模块,降低耦合度,...
Eclipse IDE本身就是一个基于OSGi的平台,各个插件作为独立的bundle进行管理。此外,Spring Dynamic Modules(Spring DM)和Apache Felix等开源项目也使用OSGi来构建可扩展的系统。 六、挑战与优势 尽管OSGi提供了...
Eclipse插件开发学习笔记将带领我们深入了解Eclipse插件开发的方方面面。 首先,我们需要了解Eclipse插件的基础概念。在Eclipse中,插件主要由一系列的扩展点(Extension Points)组成,这些扩展点定义了插件可以...
本文将深入探讨Eclipse插件开发的相关知识点,结合提供的"全书分为4篇共24章"的学习笔记和源码,帮助你更全面地理解和实践Eclipse插件开发。 第一篇:基础篇 在这一篇中,你将学习到Eclipse插件开发的基础知识,...
【Eclipse插件FileSync详解】 Eclipse是一款广泛使用的开源集成开发环境(IDE),它支持多种编程语言,如Java、C++、Python等。为了增强Eclipse的功能,开发者可以使用插件来扩展其特性。"FileSync"是专门为Eclipse...
Eclipse插件的使用极大地扩展了其功能,使得开发者能够根据自己的需求定制工作环境。以下将详细介绍Eclipse插件的使用及其相关知识点。 1. **Eclipse插件体系结构** Eclipse基于OSGi框架构建,其插件系统是其核心...
这一部分通常会介绍插件开发的基本概念,包括Eclipse插件体系结构、OSGi框架以及如何创建第一个Eclipse插件项目。开发者会学习到Plugin.xml文件的重要性,它是描述插件元数据的关键,包括插件依赖、提供的服务、激活...
Eclipse插件开发教程PPT是针对开发者设计的一份详细教学材料,旨在帮助他们了解并掌握如何利用Eclipse平台进行插件开发,从而定制自己的开发环境。以下是基于这个教程的几个关键知识点: 1. **Eclipse插件体系结构*...
Eclipse是一款广泛使用的...总之,Eclipse插件开发是一项涉及多方面技能的任务,包括Java编程、理解OSGi、掌握Eclipse API以及XML配置。通过学习和实践,开发者可以创建出符合需求的个性化Eclipse环境,提升开发效率。
这是Eclipse插件的核心配置文件,定义了插件的元数据,包括插件ID、版本号、依赖关系、提供的和使用的服务等。通过编辑此文件,开发者可以控制插件的行为和与其他插件的交互。 3. **RCP(Rich Client Platform)**...
神州数码作为一家专注于IT服务的公司,可能会对Eclipse插件开发有深入的需求,因此在面试过程中,掌握Eclipse插件开发技术是非常重要的。下面将详细介绍Eclipse插件开发的相关知识点。 一、Eclipse插件体系结构 ...
理解OSGi的基本概念,如Bundle(模块)和Service(服务),是进行Eclipse插件开发的第一步。同时,Eclipse的插件系统基于Plug-in Development Environment (PDE),提供了一系列工具来简化开发流程。 二、创建...
3. **扩展点(Extension Points)与扩展(Extensions)**:Eclipse插件通过定义和使用扩展点来实现功能的集成。开发者需要了解如何查找、定义和使用已有的扩展点。 4. **透视图(Perspectives)、视图(Views)、...
Eclipse插件基于OSGi框架,它允许开发者创建可复用的模块化组件,这些组件可以与其他Eclipse插件交互,以提供定制化的开发体验。 描述中的"入门级简单例子 明了清晰"提示我们,这些例子将特别适合初学者,旨在清晰...
Eclipse插件是基于OSGi模块系统构建的,每个插件都是一个独立的模块,它们通过声明依赖关系互相协作。开发者需要创建一个`plugin.xml`文件来定义插件的元数据,包括插件ID、版本、依赖项以及提供的服务和扩展点。 ...
1. **插件项目结构**:Eclipse插件开发基于OSGi框架,通常包含`.plugin.xml`配置文件、源代码、资源文件等。`.plugin.xml`定义了插件的基本信息和提供的服务。 2. **插件开发工具**:Eclipse本身提供了插件开发环境...
Eclipse插件基于OSGi框架,每个插件都是一个独立的模块,通过提供服务和使用其他插件的服务来实现功能扩展。插件之间通过接口进行通信,这种模块化的设计使得插件可以灵活地添加、更新或移除,而不会影响到整个系统...
Eclipse插件开发涉及的主要技术包括OSGi(Open Service Gateway Initiative)和JFace等。OSGi是一个Java的模块系统,它定义了如何在运行时动态地发现和管理软件包和类。插件可以独立地安装、启动、停止、更新和卸载...