命令行可使用几种方式来执行:
| 全局选项 | 说明 |
|---|---|
| -failok | 和-failok属性是相同的,默认情况下即使出现错误也会完成打包。 |
| -exceptions | 当打包时出现导致程序退出的致命错误时打印出此异常信息。默认情况下只打印了异常的简要信息,添加此选项可打印出详细的异常堆栈信息,这对于调试和查找错误原因是非常有帮助的。 |
print可用于查看JAR文件的某些信息,以下的信息可通过print来查看:
使用示例: bnd print -verify *.jar
build可用于按照bnd的描述打包生成bundle文件。默认输出的bundle的文件名为bnd文件的文件名+.jar。 可用的参数有:
bnd build -classpath bin -noeclipse -output test.jar xyz.bnd
wrap命令用于将一个已存在的jar文件转换为符合OSGi
规范的Jar文件或合并到已存在的bundle中。如输出的文件不可覆盖,则会生成一个以.bar结尾的文件。默认的bnd文件信息为:
Export-Package: *
Import-Package: <packages inside the target jar>
如果目标bundle有manifest文件,那么两者的头信息将合并。 默认值可使用properties文件进行覆盖。
bnd wrap -classpath osgi.jar *.jar
打印出当前目录下Eclipse工程的信息。
bnd eclipse
只需将bnd.jar文件放入eclipse/plugins目录并重启eclipse即可完成安装。安装完这个插件后在以.bnd作为扩展名的文 件上点右键即可看到\'Make Bundle\'菜单,如在jar文件上点击右键,则有两个菜单可选择:\'Wrap JAR\'用于将此JAR文件生成一个包含了所有imports和所有exports的bundle;\'Verify Bundle\'用于校验此JAR文件是否符合OSGi Bundle的规范,如有错误或警告信息均会以对话框的形式显示。
bnd.jar也可作为ANT task使用。下面的例子演示了如何在ANT文件中使用bnd.jar:
<target name=\"build\">
<taskdef resource=\"aQute/bnd/ant/taskdef.properties\"
classpath=\"bnd.jar\"/>
<bnd
classpath=\"src\"
eclipse=\"true\"
failok=\"false\"
exceptions=\"true\"
files=\"test.bnd\"/>
</target>
在此ANT task中可设置以下属性:
| 属性名 | 说明 |
|---|---|
| classpath | 相对于ant工程文件的路径。 |
| eclipse | True代表解析Eclipse的.classpath文件,也就是和eclipse工程采用同样的classpath;false代表不解析Eclipse的.classpath文件。 |
| failok | true代表即使出现错误,也生成Bundle文件;false代表当出现错误时,则不生成Bundle文件。 |
| exceptions | false代表出现错误时,仅显示错误的简要描述;true代表出现错误时,显示详细的错误堆栈信息。 |
| files | bnd文件。 |
| sourcepath | 源码所在路径。 |
| output | 文件输出的路径。 |
还可在Ant中使用以下的Task:
| task名 | 类名 | 属性 |
|---|---|---|
| bndeclipse | EclipseTask | prefix=\'project.\' |
| bndexpand | ExpandPropertiesTask | propertyFile=\'<file>\' |
| bndwrap | WrapTask | jars=\'<list>\', output=\'<dir>\', definitions=\'<dir>\', classpath=\'<file-list>\' |
在Felix maven plugin中有关于此maven plugin的描述,maven plugin中默认的值为:
Bundle-SymbolicName
: <groupId>.<artifactId>
Bundle-Name: project.getName();
Bundle-Version: <version>
Import-Package: *
Export-Package: <groupId>.<artifactId>.* (unless Private-package is set)
Bundle-Description: project.getDescription()
Bundle-License: project.getLicenses()
Bundle-Vendor: project.getOrganization()
Include-Resource: src/main/resources
有很多种错误和警告信息,看到信息就知道错误和警告的原因了。