bnd是什么意思

bnd是什么意思,第1张

BND : Band v. 联合, 结合

BND : Bound vt. 跳跃前进, 形成界限

BND : Be Nice Day 是美好的一天

BND : Business Needs Document 业务需要的文件

BnD : Blazin' N' Drinkin' (Counter-Strike gaming clan) Blazin ' N '喝的(相反罢工游戏族)

BND : Bundesnachrichtendienst (German Intelligence Agency) 德国情报机构Bundesnachrichtendienst

BND : Brunei Dollar (ISO currency code) 文莱美元(ISO货币代码)

BND : Biblioteca Nacional Digital (Portugal) Biblioteca Nacional数字(葡萄牙)

BND : Bend (street type) 街头型()

BND : Bank of North Dakota 北达科他的银行

BND : Boys Next Door 隔壁的男孩

BND : Builds and Deliveries 建立并传送

BND : Brunei Dollar 文莱美元

BND : Barely Noticeable Difference 几乎没有显著差异

BND : Bandar Abbas, Iran 阿巴斯表示,伊朗

BND : Bundesnachrichtendienst (West German Intelligence Agency) 德国情报机构Bundesnachrichtendienst(西)

BND : Buy Nothing Day (day after Thanksgiving) 买什么日子一天(感恩节后)

bnd应该是整型的吧? ~是按位取反运算符,&是按位与运算符,所以这个表达式的意思就是对bnd和bnd按位取反之后的值做与运算,运算结果肯定是0,不论bnd的值是多少。 比如在32位机器上面,bnd=1,它的二进制是00000000 00000000 00000000 00000001,则~bnd的二进制是11111111 11111111 11111111 11111110,然后这两个二进制做与运算,可以看到每一个位与完之后都是0,所以最后结果就是0了。

这里有详细的介绍http://www.aqute.biz/Code/BndCn,应该是一种数据格式。

Bnd - Bundle Tool

介绍

BND工具可用于创建符合OSGi R4规范的Bundle和检测Jar文件是否符合OSGi R4规范。其主要功能有:

显示Bundle的manifest信息和其所包含的Jar文件;

将Jar文件打包为Bundle;

按照OSGi R4规范把类路径下的文件打包为OSGi Bundle;

检测Bundle中的manifest信息是否符合OSGi R4规范。

BND工具包含了:

命令行工具

Eclipse插件

Ant Task

Maven插件

背景

通常情况下jar文件是通过Sun jar tool、ant jar task或maven packager打包生成的,所有的工具采用的为同样的方式,开发人员复制需要打包到jar的文件到目录中,然后打包这个目录,很明显这个方法是可行的。

Bnd采用的是不同的处理方式,它根据classpath来组装需要打包的java classes和packages。使用Bnd工具可从源代码、目录或者其他的jar文件中创建出jar文件,你不需要将文件复制来复制去,当需要的时候Bnd可以根据元信息找到它所需要的文件。

Bnd在生成jar时根据3个不同的参数来生成:

Export-Package、Private-Package和Include-Resource

Private-Package和Export-Package的值由很多带语法的语言片段组成的,这些语言片段由表达式、属性和描述组成,就像OSGi的属性和描述。例如:

Export-Package: com.acme.*version=1.2

每个语言片段按照顺序应用到classpath中的每个package上,顺序的意思就是如果有一个更先的语言片段符合package的话,那么后面的语言片段就不会生效了。如果语言片段中的属性和描述都符合package,那么对于此package的描述就生效了。

Private-Package和Export-Package的不同在于Export-Package是可以带版本的,如果package既属于Private-Package,又属于Export-Package,那么这个package会作为Export-Package而生效。 语言片段可以使用”!”开头,这种情况下!后的包不会被打入jar文件中,例如:

Export-Package: !com.acme.impl,com.acme.*version=1.2

这类过滤性质的语言片段也是按顺序生效的,如果带!的语言片段写在最后,那么由于com.acme.*已经生效了,最后打包出来的还是会有com.acme.impl。

Include-Resource参数可以用来定义需要复制哪些资源文件到Jar中,这可以用来打包licenses、images等等资源文件,参数里的语言片段可以是目录、文件或者jar。如文件需要预先处理,可采用{}的方式来定义,如{license.txt}。

创建jar时,bnd会分析classes,并将其中引用到了但不在jar中的packages列入import list。这些import list信息对应的放入Import-Package项中。正常情况下,Import-Package的参数为*,也就是说所有引用的packages都会被导入。但有些时候可能需要忽略其中的个别引用的package,那么可通过把import中的package定义为optional或取消import该package,例如:

Import-Package: !com.acme.*, *resolution:=optional

bnd文件由很多的属性构成,以大写字母开头的属性会作为元信息复制到manifest文件中,小写字母开头的属性则作为变量而使用。

Jar创建后,bnd会校验创建的结果,主要是依据mainfest文件来进行详细的校验,以确认bundle的有效性。

bnd程序比传统的jar更高一级,除了jar的打包之外它还提供了一些其他的功能,它更强调以packages的角度来进行打包,而不仅仅是文件的角度,Bnd的打包方式保证了在打包生成Bundle时就可以检查出Bundle是否符合OSGi R4规范。

如打包生成的jar文件已存在并且没有文件需要更新,则bnd不会产生新的打包文件。

可以以几种方式来使用bnd:命令行、ant task、maven插件和Eclipse插件。

快速上手

假设我们需要在Eclipse中创建一个bundle,Eclipse中的每个java工程都是有类路径和源码的,因此Bnd可以获取到所有的classes,但它仍然无法知道你想怎么样组建jars/bundles,这就需要编写一个bnd file来告诉它,bnd file的文件名默认为bundle的symbolic name加.bnd来构成,例如aQute.example.bnd就是一个典型的bnd文件的文件名,只要文件名不是bnd.bnd,那么.bnd前的字符串就会作为Bundle的symbolic name。

以aQute OSGi tutorial Chat为例,来创建一个bundle,这个bundle中有两个package:

aQute.service.channel

aQute.tutorial.chat

aQute.service.channel包须对外提供,其他包则保持私有的状态,所有源码中引用到的不在classpath中的包都必须导入,要达到这个要求,bnd文件的写法如下所示:

Export-Package: aQute.service.channelversion=1.0

Private-Package: aQute.tutorial.chat

你要做的就只有这些,在Eclipse中,你可以选择这个bnd文件,然后点击右键选择其中的Make Bundle,将会创建一个包含以下目录和文件的jar:

META-INF

MANIFEST.MF

aQute/service/channel

Channel.class

aQute/tutorial/chat

Chat$ChannelTracker.class

Chat.class

也可以通过命令行运行: bnd aQute.tutorial.chat.bnd

来看看产生的jar文件里的manifest.mf文件,在命令行中可以通过bnd aQute.tutorial.chat.jar来查看,或直接使用winzip打开jar文件来看:

Manifest-Version: 1

Bundle-Name: aQute.tutorial.chat

Private-Package: aQute.tutorial.chat

Import-Package: aQute.service.channelversion=1.0,

org.osgi.frameworkversion=1.3,

org.osgi.util.trackerversion=1.3

Bundle-ManifestVersion: 2

Bundle-SymbolicName: aQute.tutorial.chat

Export-Package: aQute.service.channelversion=1.0

Bundle-Version: 0

就像你所看到的,bnd补充了很多的头信息。第一个头信息:Manifest-Version是jar文件必须的;Bundle-Name是根据Bundle-SymbolicName来生成的,因为在bnd文件中未指定;Private-Package头信息指定了不对外提供的packages;Import-Package头信息是bnd根据classes所引用的packages来生成的,可以看到,bnd还提取了所引用的package的版本信息,这些版本信息是从这些package的jar文件的manifest中获取的;Export-Package显示了需要对外提供的package。在生成jar文件时,bnd会校验这些头信息是否符合OSGi规范,如不符合则会提供错误信息或警告信息。

Bnd文件格式

Bnd文件的格式和manifest.mf非常相似。尽管它是以properties文件的方式来读取的,还是可以使用':'作为分隔符。唯一要注意的就是bnd文件是不支持以空格开头的,每行的长度不限,key和value前后的空格都会被去除,请参见Properties来了解更多关于此格式的信息。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12056239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存