1) 描述性的属性
- Bundle-Name: Simple Paint API #1
- Bundle-Description: Public API for a simple paint program. #2
- Bundle-DocURL: http://www.manning.com/osgi-in-action/ #3
- Bundle-Category: example, library #4
- Bundle-Vendor: OSGi in Action #5
- Bundle-ContactAddress: 1234 Main Street, USA #6
- Bundle-Copyright: OSGi in Action #7
2)唯一性标签属性
- Bundle-ManifestVersion: 2
- Bundle-SymbolicName: org.foo.shape
- Bundle-Version: 2.0.0
Bundle-ManifestVersion这个属性在OSGI R4中是必须的,在R4中的值必须是2.
3)可见性属性
- Bundle-ClassPath: .,other-classes/,embedded.jar
同一个bundle中的参照类路径,classpath的顺序是有关系的.如果manifest文件没有这个属性,则默认classpath为"."
- Export-Package: org.test.hello,org.test.other
用逗号分隔的共享给外部的包名. 还可以在每个包名后面加上vendor信息,
例如: Export-Package: org.test.hello; vendor="vendor1",org.test.other; vendor="vendor1"
或者 Export-Package: org.foo.shape; org.foo.other; vendor="vendor1"
上面两个例子是等价的
package还可以制定版本号: Export-Package: org.foo.shape; org.foo.other; version="2.0.0"
- Import-Package: org.foo.shape,org.foo.shape.other
逗号分隔的包名,这些包名为此bundle需要参照其他bundle的包
Import-Package也有可以加Export-Package一样的参数: vendor,version
这些参数限制了引入包的范围
例如Import-Package: org.osgi.framework; version="1.3.0" 表示因为包的名字为org.osgi.framework,版本为从1.3.0(包括)到无限大.
Import-Package: org.osgi.framework; version="[1.3.0,2.0.0)" 表示引入包的版本在1.3.0(包括)到2.0.0(不包括)之间
默认情况下没有version指定,意味着version="0.0.0"也就是任何版本
以java开头的package不需要指定,但是javax开头的需要.
uses 指令的使用
uses指令用在Export-Package属性中,但是要配合Import-Package属性一起来使用才有意义.例如bundleA 的manifest文件包含如下片段:
Export-Package: org.osgi.service.http;uses:="javax.servlet"; version="1.0.0"
Import-Package: javax.servlet; version="2.3.0"
上面的例子说明bundleA共享了org.osgi.service.http这个包给其他包来使用,版本从1.0.0到无限大,使用bundleA(也就是引入bundleA)的其他包如果要引入javax.servlet这个包,那么要引入的javax.servlet包就是bundleA中引入的这个包. 这种引入具有传递性.
4)lifecycle相关
- Bundle-Activator: org.helloworld.Activator
bundle的钩子类,此类必须实现org.osgi.framework.BundleActivator接口(start 和stop 方法).
- Bundle-UpdateLocation: url
bundle.update()时默认的url