Bndtools – 04 – 基本概念

介绍Bndtools的基本概念。

目录

1. 仓库(Reposotory

Bndtools使用仓库(repository来提供在构建时和运行时的依赖。参考关于repository的单独章节

2. 插件(Plug-ins)和插件路径(Plug-ins Path

仓库(Repositories)和其它类型的插件可以通过编辑cnf/build.bnd中的-plugin配置项来将其添加到工作空间中。插件通过其类名来指定,并且会带有附加配置属性,方式如下:

例如:

注意如果在属性值中带有逗号,则整个属性值都必须使用单引号或双引号引起来,防止逗号被解析成为插件清单列表的分隔符。如果插件类没有被构建到bnd/Bndtools之中,则我们必须使用path属性来直接指定类路径,例如:

3. BundleBnd文件

Bndtools采用“生成manifest(generated manifest)”的方式来构建OSGi Bundle;这与其它工具的“先编写manifest(manifest first)”的方式不同。 参考OSGi Community Wiki中的 Tooling Approaches页面来理解这些不同方式的差别。

Bndtools工程基于标准的Eclipse Java工程。在Java代码被编译成类文件后,Bndtools构建器将会接管并生成一个或多个OSGi Bundle。它使用.bnd文件来控制生成的OSGi Bundle的内容。

3.1 工程置文件:bnd.bnd

Bndtools工程中包含一个名为bnd.bnd的文件。这个文件中包含了工程的设置信息,例如Build Path,它定义了在构建时对工程可见的库:

20170212_101

3.2 BundleSingle-Bundle)和多BundleMultiple-Bundle)工程

Bndtools projects 可以生成一个或多个Bundle。在单Bundle(single-bundle)模式下(默认为此模式),定义Bundle的所有指令都会在bnd.bnd文件中列出来:换言之,bnd.bnd文件既控制工程设置,也控制生成单个Bundle的指令。

在多Bundle(multiple-bundle)模式下,bnd.bnd文件中仍然会包含工程设置,例如Build Path。但是控制输出Bundle的指令会放到其它独立的.bnd文件中。 这些Bundle会被称为“子Bundle(sub-bundles)”,而开启多Bundle模式也被称为开启“子Bundle”模式:

20170212_102

在开启子Bundle模式之后,在Bndtools工程的根目录下会为每个.bnd文件生成一个Bundle。这些.bnd文件中仅包含定义该Bundle的内容所需的指令,例如Private Packages、Export Packages等。

3.3 生成Bundle符号名(Bundle symbolic name)

Bndtools生成的Bundle符号名(Bundle symbolic name ,BSN) 源自工程名以及——如果开启了子Bundle模式——子Bundle文件名。 在单Bundle模式下,Bundle的BSN与Bndtools工程名相同。因此如果工程名为org.example,则Bundle的BSN 也将会是org.example:

Bundle-SymbolicName: org.example

在子Bundle模式下,每个Bundle的BSN为工程名加上子Bundle文件名(不包括.bnd扩展名)。因此如果工程名为org.example ,子Bundle文件名为foo.bnd ,则BSN将会是org.example.foo:

Bundle-SymbolicName: org.example.foo

不要尝试改写生成的BSN,例如在.bnd文件中添加 Bundle-SymbolicName,因为当其它工程依赖此Bundle的时候,Bndtools会利用工程名与Bundle名之间的关联性来查找Bundle。

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