领先一步
VMware 提供培训和认证,以助您快速提升技能。
了解更多在管理和转换 SpringSource 企业 Bundle 存储库 中包含的众多 Bundle 时,记住哪些包被委托给引导类加载器、从系统 Bundle 导出还是从系统中的其他 Bundle 导出变得非常困难。此信息非常重要,因为您可能不希望导入被委托给引导类加载器的包,您可能希望以“0”版本导入系统 Bundle 包,并且希望为所有其他包定义自定义导入。记住哪些包属于这些类别中的每一个类别最终会容易出错,并且为它们定义模板条目可能非常耗时。
随着 1.0.0.M4 的发布,Bundlor 已经获得了将 OSGi 配置文件作为输入并自动为被委托给引导类加载器的包和系统 Bundle 添加模板条目的功能。此输入作为属性文件提供,可与命令行、ANT 和 Maven 一起使用。
org.osgi.framework.system.packages
定义了从系统 Bundle 导出的包,而 org.osgi.framework.bootdelegation
定义了被委托给引导类加载器的包。有关这些属性值的语法的更多信息,请参阅 OSGi 规范 §3.8.3 和 §3.8.5。对于 Bundlor,这些属性定义在标准的 .properties 文件中,如下所示。
org.osgi.framework.system.packages = \
javax.accessibility,\
javax.activation,\
javax.activation;version="1.1.0",\
javax.activity,\
javax.annotation,\
...
org.osgi.framework.bootdelegation = \
com_cenqua_clover,\
com.cenqua.*,\
com.yourkit.*,\
...
Bundle-SymbolicName: com.springsource.org.apache.log4j
Bundle-Name: Apache Log4J
Bundle-Vendor: SpringSource
Bundle-ManifestVersion: 2
Import-Template:
com.sun.jdmk.*;version="[5.1.0, 5.1.0]";resolution:=optional,
javax.jms.*;version="[1.1.0, 2.0.0)";resolution:=optional,
javax.mail.*;version="[1.4.0, 2.0.0)";resolution:=optional
在没有配置文件的情况下对 Bundlor 运行时,我收到以下警告
SB0001W: The import of package javax.management does not specify a version.
SB0001W: The import of package javax.naming does not specify a version.
SB0001W: The import of package javax.swing does not specify a version.
SB0001W: The import of package javax.swing.border does not specify a version.
SB0001W: The import of package javax.swing.event does not specify a version.
SB0001W: The import of package javax.swing.table does not specify a version.
SB0001W: The import of package javax.swing.text does not specify a version.
SB0001W: The import of package javax.swing.tree does not specify a version.
SB0001W: The import of package javax.xml.parsers does not specify a version.
SB0001W: The import of package org.w3c.dom does not specify a version.
SB0001W: The import of package org.xml.sax does not specify a version.
SB0001W: The import of package org.xml.sax.helpers does not specify a version.
为了解决这些警告,我可以添加一些 Import-Template
条目。相反,我将再次使用 dm Server OSGi 配置文件 运行 Bundlor。此配置文件从系统 Bundle 导出每个这些包。此运行返回时没有警告,并以 version="0"
导入每个这些包。此 Bundle 不依赖于任何被委托给引导类加载器的包,因此我们的清单中没有忽略导入。
osgiProfilePath
属性。<bundlor:bundlor
bundlePath="${basedir}/org.springframework.integration.jar"
outputPath="${basedir}/target/org.springframework.integration.jar"
bundleVersion="1.0.2.BUILD-${timestamp}"
osgiProfilePath="java6-server.profile"
manifestTemplatePath="${basedir}/template.mf"/>
osgiProfilePath
配置。<build>
<plugins>
<plugin>
<groupId>com.springsource.bundlor</groupId>
<artifactId>com.springsource.bundlor.maven</artifactId>
<version>1.0.0.M2</version>
<executions>
<execution>
<id>bundlor</id>
<goals>
<goal>transform</goal>
</goals>
<configuration>
<osgiProfilePath>java6-server.profile</osgiProfilePath>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
manifest
和 transform
执行都获得了一个新的可选 -p, --profile
参数。bin/bundlor.sh transform
-b com.springsource.org.apache.log4j.jar
-m com.springsource.org.apache.log4j.mf
-p java6-server.profile
能够读取 OSGi 配置文件作为输入极大地简化了清单模板的内容。如果您能想到更多改进领域,请在 Bundlor JIRA 上打开问题或对现有问题进行投票。