领先一步
VMware提供培训和认证,以加快您的进步。
了解更多正如Rob的博文所指出的那样,在过去的几个月里,我们了解了很多关于人们如何管理他们自己的OSGi应用程序。
我们发现一些开发者想要管理他们自己的bundle清单,但是需要一些帮助来自动化细节,例如指定一系列导入中的包版本。其他开发者希望根据其项目的內容和构建文件中指定的依赖项生成清单。此外,两种类型的开发者都需要使用没有必要的OSGi元数据以使其能够在OSGi服务平台中使用的现有库。
Bundlor为所有这些情况提供了解决方案,并且是我们内部使用了一段时间的工具,用于管理发布到SpringSource企业Bundle存储库的bundles。Bundlor自动化检测依赖项以及在JAR创建后创建OSGi清单指令的过程。它以JAR和模板作为输入,该模板包含标准OSGi清单头的超集。然后,它分析JAR中包含的源代码和支持文件,将模板应用于结果,并生成清单。
头 | 描述 |
---|---|
Excluded-Exports | 必须不添加到清单的包的逗号分隔列表Export-Package头。 |
Excluded-Imports | 默认情况下,Bundlor将为它确定由jar中的代码或特殊文件引用的每个包添加导入。此头允许指定不生成导入的包的逗号分隔列表。 |
Export-Template | 默认情况下,Bundlor将所有导出的包版本指定为Bundle-Version。此头允许以不同版本导出单个导出的包。例如:Export-Template com.foo.*;version="1.5"将导致任何Export-Package条目为com.foo或其子包的版本为1.5. |
Ignored-Existing-Headers | 对于正在为其生成清单的JAR已包含符合OSGi的清单的情况,此头可用于列出Bundlor应忽略的原始清单中的头。 |
Import-Template | 此头用于增强Bundlor通过字节码和特殊文件分析生成的包导入。通常,这将是为导入设置版本,并且在某些情况下,将其标记为可选。头的值采用包名称和属性的逗号分隔列表的形式。 |
以下是Spring Binding bundle中的Bundlor清单模板示例,显示了通配符和显式Import-Package语句的使用。
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.springframework.binding
Bundle-Name: Spring Binding
Bundle-Vendor: SpringSource
Import-Package:
ognl;version="[2.6.9, 3.0.0)";resolution:=optional,
org.jboss.el;version="[2.0.0, 3.0.0)";resolution:=optional
Import-Template:
org.springframework.*;version="[2.5.4.A, 3.0.0)",
org.apache.commons.logging;version="[1.1.1, 2.0.0)",
javax.el;version="[2.1.0, 3.0.0)";resolution:=optional
Bundlor扫描以下类型
将SpringSource企业Bundle存储库添加到pom.xml文件。
<pluginRepositories>
<pluginRepository>
<id>com.springsource.repository.bundles.milestone</id>
<name>SpringSource Enterprise Bundle Repository</name>
<url>http://repository.springsource.com/maven/bundles/milestone</url>
</pluginRepository>
...
</pluginRepositories>
添加bundlor插件到pom.xml文件
<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>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
最后,使用package命令构建bundle。
mvn install package
要在ANT内部运行Bundlor,首先定义一个bundlor命名空间。
<project name="bundlor-sample-ant"
xmlns:bundlor="antlib:com.springsource.bundlor.ant">
然后将bundlor任务导入构建。
<target name="bundlor.init">
<taskdef resource="com/springsource/bundlor/ant/antlib.xml"
uri="antlib:com.springsource.bundlor.ant">
<classpath id="bundlor.classpath">
<fileset dir="${bundlor.home}/dist"/>
<fileset dir="${bundlor.home}/lib"/>
</classpath>
</taskdef>
</target>
最后,使用bundlor任务。
<bundlor:bundlor
bundlePath="${basedir}/org.springframework.integration.jar"
outputPath="${basedir}/target/org.springframework.integration.jar"
bundleVersion="1.0.2.BUILD-${timestamp}"
manifestTemplatePath="${basedir}/template.mf"/>
要从命令行运行Bundlor,请更改目录到$BUNDLOR_HOME/bin目录并运行bundlor.sh或bundlor.bat.
% ./bundlor.sh transform \ --bundle ./org.springframework.integration.jar \ --manifest ./template.mf \ --outputfile ./target/org.springframework.integration.jar Transformed bundle written to ./target/org.springframework.integration.jar %