一个插件通过META-INF/MANIFEST.MF 文件,定义了一些描述自己的信息。
下面主要讲述Eclipse 对OSGI Manifest Header 的扩展。
OSGI R4.1 框架规范中定义了一系列这样的信息,如:Export-Package 和Bundle-Classpath 等等。开发者要为插件配置相关的信息。
Eclipse OSGI 框架完整的实现了OSGI R4.1 框架的规范和核心框架服务。
OSGI 核心框架服务包括:
1 Package Admin Service Specification
2 URL Handlers Service Specification
3 Start Level Service Specification
4 Conditional Permission Admin Specification
5 Permission Admin Service Specification
OSGI 框架还定义了一些可以选择的服务,这些可选择服务,Eclipse OSGI 框架并没有实现。关于更多的OSGI 信息请参考:http://www.osgi.org/Download/Release4V41
Eclispe Bundle Manifest Headers
Eclipse OSGI 框架支持一些额外的bundle manifest headers 和指令。就是说,Eclipse OSGI 框架对OSGI 框架做了一些扩展。
额外的Export-Package 指令:
1 Export-Package: org.eclipse.foo.internal; x-internal:=true
注释:Export-Package 叫作"header", 而x-internal 叫做"指令"。
这个x-internal:=true x-internal:=true指令说明: 包org.eclipse.foo.internal 是一个内部包。如果不指定,则默认为false。
小提示:在Eclispe 的编程约定中,包名中带有"internal" 的包为内部包,你编写的程序(通常称为客户端程序)不应该使用内部包中的类。
2 Export-Package: org.eclipse.foo.formyfriends; x-friends:="org.eclipse.foo.friend1, org.eclipse.foo.friend2"
表示:插件"org.eclipse.foo.friend1" 和 插件"org.eclipse.foo.friend2" 被鼓励使用这个包"org.eclipse.foo.formyfriends"。
Eclipse-LazyStart Header
这个Header 定义:当这个插件中的类或资源被访问前,是否启动该插件。(就是提供了一种方式,当插件中的类被访问了,但是可以不启动这个插件)。当Eclipse-LazyStart 为true时, 'exceptions' 属性指定了一些包,这些包被访问时,这个插件不被启动。
Eclipse-LazyStart: true; exceptions="org.eclipse.foo1, org.eclipse.foo2"
解释:当其他插件访问"org.eclipse.foo1, org.eclipse.foo2 包的时候,该插件不被启动。
Eclipse-LazyStart的默认值为假
注意:在Eclispe 3.4 以后的版本中,Eclipse-AutoStart and Eclipse-LazyStart headers 已经被标记为"不被鼓励"。取而带之的是Bundle-ActivationPolicy: lazy
Eclipse-LazyStart: false; exceptions="org.eclipse.foo1, org.eclipse.foo2" 和
Bundle-ActivationPolicy: lazy; include:="org.eclipse.foo1, org.eclipse.foo2" 是等效的。
小提示:插件被启动时,BundleActivator.start(BundleContext) 方法被容器调用。
The Eclipse-PlatformFilter Header
指定平台过滤器,当插件制定的过滤器为真时,插件才处在resolve 状态。(一个插件有几个状态,如安装,启动等等)。
支持的过滤器:
osgi.nl - 平台的语言设置
osgi.os - 平台的操作系统
osgi.arch - 平台的架构
osgi.ws - 平台的窗口系统
如:Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))
解释:当这几个过滤器为真时,这个插件才能被启动。
注意:其他的Eclipse Header,可以在下面的连接中找到参考。主要是Eclispe 扩展的Header, 即:Eclispe- 开头的Header。http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/tasks/pde_feature_build.htm
本文只翻译了常见的Eclipse 扩展的Header。其他的可以参考原文。
本文翻译http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.pde.doc.user/tasks/pde_feature_build.htm