科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道了解 Eclipse 插件如何使用 OSGi

了解 Eclipse 插件如何使用 OSGi

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:王洪伟 来源:CSDN 2007年9月29日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

清单 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 解析器方法 —— defaultstrict,可以使用 osgi.resolver 属性指定它们。Eclipse 还包括对 Export-Package 属性的两个扩展 —— x-internalx-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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章