OSGi bundle 清单头

版本 3.1 - 最后修订于 2005 年 6 月 20 日

Bundle 可以将有关它自己的描述性信息存储在名为 META-INF/MANIFEST.MF 的清单文件中。OSGi R4 框架规范定义了一组清单头,如 Export-Package 和 Bundle-Classpath,bundle 开发者使用这些清单头来提供关于 bundle 的描述性信息。Eclipse OSGi 框架实现了完整 OSGi R4 框架规范和所有“核心框架”服务。OSGi R4 核心框架服务包括下列内容:

OSGi R4 规范定义了许多可选服务。可选服务未与 Eclipse OSGi 框架实现包括在一起。 要了解有关 OSGi R4 清单头和服务的信息,请参阅 OSGi 规范

Eclipse bundle 清单头

Eclipse OSGi 框架支持许多附加的 bundle 清单头和伪指令。Bundle 开发者可以通过这些附加的头和伪指令来利用一些 Eclipse OSGi 框架中未被指定为标准 OSGi R4 框架一部分的的附加功能。

附加的 Export-Package 伪指令

Eclipse OSGi 框架在 Export-Package 头中支持附加的伪指令。这些伪指令用来指定已导出包的访问限制规则。请参阅 osgi.resolverMode 以将 Eclipse OSGi 框架配置为在运行时强制执行访问限制规则。

x-internal 伪指令

可以在 Export-Package 头中使用 x-internal 伪指令来指定该包是否是内部包。插件开发环境不鼓励其它 bundle 使用内部包。如果未指定 x-internal 伪指令,则将使用缺省值“false”。x-internal 伪指令必须使用以下语法:

x-internal ::= ( 'true' | 'false' )

下面是 x-internal 伪指令的示例:

Export-Package: org.eclipse.foo.internal; x-internal:=true

x-friends 伪指令

可以在 Export-Package 头中使用 x-friends 伪指令来指定一系列被允许访问该包的 bundle。插件开发环境不鼓励其它 bundle 使用该包。x-friends 伪指令必须使用以下语法:

x-friends ::= '"' ( target-bundle ) ( ',' target-bundle ) * '"'
target-bundle ::= a bundle symbolic name

下面是 x-friends 伪指令的示例:

Export-Package: org.eclipse.foo.formyfriends; x-friends:="org.eclispe.foo.friend1, org.eclipse.foo.friend2"

此示例指定应该只鼓励 bundle org.eclispe.foo.friend1 和 org.eclipse.foo.friend2 使用 org.eclipse.foo.formyfriends 包。x-internal 包优先于 x-friends 伪指令。如果 x-internal 伪指令指定了“true”,则插件开发环境不鼓励所有 bundle 使用该包,即使它们被指定为友元亦如此。

Eclipse-AutoStart 头

使用 Eclipse-AutoStart 头来指定是否应该在访问 bundle 中的第一个类或资源之前自动启动该 bundle。此功能允许 Eclipse 在第一次需要使用 bundle 时根据需要激活它们。通过使用此模型,Eclipse 就可以尽可能地减少启动时处于活动状态的 bundle。Eclipse-AutoStart 头必须使用以下语法:

Eclipse-AutoStart ::= ( 'true' | 'false' ) ( ';' 'exceptions' '=' '"' exceptions-list '"' ) ?
exceptions-list ::= a comma ',' separated list of packages

使用“exceptions”属性来指定一系列包,当从这些包中装入类或资源时,一定不能导致激活 bundle。如果在 bundle 清单中未定义 Eclipse-AutoStart 头,则将使用缺省值“false”。下面是 Eclipse-AutoStart 头的示例:

Eclipse-AutoStart: true; exceptions="org.eclipse.foo1, org.eclipse.foo2"

此示例指定除了“org.eclipse.foo1”和“org.eclipse.foo2”包中的类和资源以外,对于从此 bundle 中装入的任何类或资源,都必须激活此 bundle。

Eclipse-PlatformFilter 头

使用 Eclipse-PlatformFilter 来为 bundle 指定平台过滤器。该平台过滤器在正在运行的平台中必须求值为 true 才允许解析该 bundle。Eclipse-PlatformFilter 头必须使用以下语法:

Eclipse-PlatformFilter ::= a valid LDAP filter string

框架支持对下列系统属性进行过滤:

下面是 Eclipse-PlatformFilter 头的示例:

Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))

此示例指定仅当平台属性是 osgi.ws=win32、osgi.os=win32 和 osgi.arch=x86 时才可以对此 bundle 进行解析(换而言之,在 x86 体系结构上使用 win32 操作系统和 win32 窗口系统运行的平台)。

Eclipse-BuddyPolicy 头

使用 Eclipse-BuddyPolicy 头来为 bundle 指定伙伴类装入策略。Eclipse-BuddyPolicy 头必须使用以下语法:

Eclipse-BuddyPolicy ::= ( policy-name ) ( ',' policy-name ) *
policy-name ::= ( 'dependent' | 'global' | 'registered' |
                  'app' | 'ext' | 'boot' | 'parent' )

下面是 Eclipse-BuddyPolicy 头的示例:

Eclipse-BuddyPolicy: dependent

Eclipse-RegisterBuddy 头

使用 Eclipse-RegisterBuddy 头来指定一系列 bundle,此 bundle 将被注册为那些 bundle 的伙伴。Eclipse-RegisterBuddy 头必须使用以下语法:

Eclipse-RegisterBuddy ::= ( target-bundle ) ( ',' target-bundle ) *
target-bundle ::= a bundle symbolic name

下面是 Eclipse-RegisterBuddy 头的示例:

Eclipse-RegisterBuddy: org.eclipse.foo.bundle1, org.eclipse.foo.bundle2

Eclipse-ExtensibleAPI 头

Eclipse-ExtensibleAPI 用来指定主机 bundle 是否允许段 bundle 对该主机 bundle 添加其它 API。如果主机 bundle 希望允许段 bundle 将其它包添加到该主机 bundle 的 API 中,则应该使用此头。如果未指定此头,则将使用缺省值“false”。Eclipse-ExtensibleAPI 头必须使用以下语法:

Eclipse-ExtensibleAPI ::= ( 'true' | 'false' )

下面是 Eclipse-ExtensibleAPI 头的示例:

Eclipse-ExtensibleAPI: true

Plugin-Class 头

Plugin-Class 头仅用来支持为 Eclipse 2.1 平台开发的插件。此头用来指定一个类名,该类使用旧的 Eclipse 2.1 激活模型来激活插件。为 Eclipse 3.0 或更高版本平台开发的新 bundle 不应该使用此头。下面是 Plugin-Class 头的示例:

Plugin-Class: org.eclipse.foo.FooPlugin