`
snoopy7713
  • 浏览: 1150546 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

OSGi 清单选项

    博客分类:
  • OSGi
阅读更多
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 地图不可接受的类的每个插件。幸运的是,伙伴类加载器选项 一节中介绍的伙伴类加载器选项解决了这个问题。

伙伴类加载器选项

    首先为 Hibernate 创建插件。然后创建一个插件,其中包含与 Hibernate 有依赖关系的特定于域的类。将下列行添加到 Hibernate 插件清单中:Eclipse-BuddyPolicy: registered

将下列清单属性添加到包含特定于域的类或资源的插件清单中: Eclipse-RegisterBuddy: hibernate

该行允许插件通过声明将自己暴露给 Hibernate 插件,而它预先并不知道这些插件。现在,Hibernate 插件可以看到需要的类,虽然它并没有专门导入它们。

 

分享到:
评论

相关推荐

    SPRING DM 参考手册

    - **束格式和清单头**:介绍了如何根据OSGi规范创建合法的束文件,包括必要的清单头信息。 - **扩展器配置选项**:提供了多种配置选项,如监听扩展器事件、指定Spring配置文件的位置等。 - **必需的Spring框架和...

    Eclipse平台扩展点清单

    ### Eclipse 平台扩展点清单知识点详解 #### 一、概述 Eclipse 是一款非常流行的开源集成开发环境(IDE),支持多种编程语言,尤其是 Java 的开发。为了满足不同开发者的需求,Eclipse 提供了大量的可扩展性机制。...

    Hibernate ORM 4.2.0 正式版

    13. [HHH-8076]:涉及OSGi清单文件中应该将javax.security和javax.validation作为可选项。这对于使用OSGi容器的项目在打包和部署时是一个重要参考。 14. [HHH-7978]:文档了从HHH-5869开始的新功能,但具体细节没有...

    Eclipse-RCP中文入门教程

    - **勾选OSGi选项**:选择“Create an OSGi bundle manifest”以使用OSGi进行打包,这在Eclipse 3.0及更高版本中是必需的。 - **选择RCP类型**:在“Rich Client Application”部分选择“Yes”,以创建RCP应用。 - *...

    Rich Client Tutorial Part 3

    2. **设置项目基本信息**:在后续页面中输入项目名(例如`org.eclipse.ui.tutorials.rcp.part3`),指示创建一个Java项目,选择Eclipse的目标版本(至少3.1),并启用创建OSGi Bundle清单文件的选项。 3. **选择...

    RCP中文入门教程.pdf

    - 选择`Create an OSGi bundle manifest`选项来启用OSGi支持,这是Eclipse 3.0及以上版本的动态加载标准。 2. **配置插件属性**: - 在`New Plug-in Project`向导中,选择创建一个RCP应用(勾选`Would you like ...

    java ClassPath 构建

    - 可以通过`-cp`或`-classpath`命令行选项,或者在`JAVA_OPTS`环境变量中设置自定义的ClassPath。 - 如果不指定ClassPath,JVM会使用默认值。 3. **构建ClassPath的方式** - **命令行参数**:在启动Java应用时,...

    Hadoopeclipse-plugin编译方法[借鉴].pdf

    这些JAR文件可以从你的Eclipse安装目录的`plugins`子目录中找到,例如`org.eclipse.ui`, `org.eclipse.jdt`, `org.eclipse.core`, `org.eclipse.equinox`, `org.eclipse.debug`, `org.eclipse.osgi`, `org.eclipse....

    rcp开发小知识

    - **MANIFEST.MF**: 插件清单文件,定义了插件的基本信息和依赖关系。 - **Bundle-Name**: 插件名称。 - **Bundle-SymbolicName**: 插件唯一标识符。 - **Bundle-Activator**: 主程序启动类的全名。 - **Require...

    Eclipse Programmer Guide

    Eclipse的运行时环境基于OSGi(Open Service Gateway Initiative)规范,允许插件在运行时动态加载、卸载和更新。这种模型极大地提高了系统的灵活性和可维护性。 2. **运行时组件** Eclipse运行时由多个组件组成...

    大厂的Android面试题.pdf

    - RecyclerView相比于ListView提供了更灵活的布局选项和更好的性能。 - 它们都是用于展示列表数据的控件,但在实现机制上有差异。 36. **排序算法** - 排序算法包括快速排序、堆排序等多种类型。 - 快速排序...

    JAVA上百实例源码以及开源项目源代码

    QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新好友列表,响应用户双击的事件,并得到好友的编号,把聊天界面加入到管理类,设置密码保护等。 Java编写的网页版魔方游戏 内容索引:JAVA...

Global site tag (gtag.js) - Google Analytics