Bndtools – 06 – FAQ

常见问题

目录

1 如何将Bundle添加到仓库中?

有多种方法来将外部的Bundle添加到你的仓库之中,使得你的工程可以顺利使用这些Bundle。最简单的方式是将Bundle从你的本地文件管理应用程序(例如:Windows Explorer,Mac Finder等)拖放到Bndtools的Repositories视图之中。 注意你需要将其拖放到指定的仓库入口之上:一般是“Local Repository”。注意你可以一次性拖放多个Bundle。

20170302_101

通过此种方法来导入Bundle比直接修改cnf/repo文件夹的内容要更好一些,因为Bndtools能马上感知到新的Bundle并重新生成仓库的OBR索引。

注意:并不是所有的仓库类型都支持添加Bundle!例如:OBR仓库类型的索引文件可能在本地或远程,因此Bndtools可能不知道应该将新的Bundle存放到哪里以及如何更新索引。不过下面的仓库类型支持添加操作:

● LocalOBR

● FileRepo

2 如何从仓库中移除Bundle

很不幸,目前还没有通用的仓库API来移除Bundle。我们计划更新此API,但是目前还需要通过手工来从文件系统中移除Bundle。

对于LocalOBR类型的仓库,可以根据如下步骤进行操作:

● 从<repo_dir>/<bsn>处删除Bundle文件。如果你希望删除对应Bundle的所有版本,则将<bsn>文件夹本身也删除(注意不要留下空的文件夹)。

● 删除OBR索引文件,<repo_dir>/repository.xml

● 刷新cnf/build.bnd文件,这会触发重新生成索引文件并刷新仓库内容。

对于FileRepo类型的仓库,除了删除OBR索引文件步骤之外(它不应该存在),其它操作方式与上述步骤一致。

3 为什么我的Bundle是空的?

在Bndtools中,Bundle的内容必须精确定义;如果没有定义Bundle的内容,则对应的Bundle就会是空的。Bundle的内容根据如下三点要求进行定义(根据链接访问bnd文档来了解详细情况):

● Private-Package 定义包含在Bundle之中但并未被导出(Export)的Java包。

● Export-Package定义包含在Bundle之中并且被导出的Java包。

● Include-Resource定义包含在Bundle之中的非Java资源文件(例如图片、XML文件等)。

注意Private-PackageExport-Package可以通过GUI编辑器的Contents标签页进行编辑。对于Include-Resource暂时没有GUI辅助,因此必须通过Source标签页手工输入。

4 “-include””Include-Resource”有何不同?

● -include指令用于从另外一个.bnd文件中将一组bnd指令包含到当前.bnd文件中来。如果有一些通用设置和通用指令需要在多个地方用到,则此功能会很方便。

● Include-Resource指令用于告诉bnd将一组非java资源(例如图片、XML文件等)包含到输出的Bundle之中。

5 如何配置系统Bundle导出清单(System Bundle Exports)?

如果要将额外的包添加到OSGi系统Bundle的导出(Export)清单中,可以在你的运行配置文件中使用-runsystempackages指令。例如:

你也可以通过使用-runpath指令来将JAR包添加到Java应用程序的类路径中,这将允许你通过系统Bundle导出清单(System Bundle Exports)将这些库文件的内容导出:

注意使用-runsystempackages指令等同于设置OSGi属性:org.osgi.framework.system.packages.extra;不过最好还是使用-runsystempackages指令,因为Bndtools内部的运行需求解析器(Run Requirements Resolver)会在解析过程中考虑这些包的可用性。

6 如何在构建时依赖一个普通的JAR文件?

有时候我们需要将一个普通的JAR文件添加到工程的构建时依赖列表之中。例如我们可能需要在构建时使用一个“纯粹的”API JAR,而在运行时则使用另外一个。或者我们可能计划将该依赖包嵌入到Bundle之中。

将普通的JAR文件添加到构建路径(Build Path)之中需要使用verson=file属性。不幸的是,目前没有GUI界面支持编辑此属性,因此你需要在Source标签页中手工编辑:

-buildpath: libs/servlet-api-3.0.jar;version=file

注意这种方式比使用Eclipse中的“添加到Build Path(Add to Build Path)”操作要更好一些,因为后者在使用ANT对工程进行离线构建时是不可见的;注意一个在Eclipse中进行编译的工程并不一定能在ANT中进行编译。使用 -buildpath会确保在Eclipse和ANT中对工程进行编译都以相同的方式进行。

打赏一下
支付宝
微信
除非注明,博客文章均为原创,转载请标明文章地址
本文地址: http://www.javafxchina.net/blog/2017/03/bndtools-06-faq/
百度已收录