OBR自动化管理插件:maven-bundle-plugin使用

参考:http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

 

1. Features:特性

    该插件基于Bnd 工具,用于帮助管理本地Maven仓库的Bundle, 同时也支持访问远程Bundle仓库。

    Bnd是通过指令去知道其行为的,Bnd认识三种指令:

    (1) Mainfest headers: 如果一个指令是以大写字母开头则该header的值将出现在MAINFEST.MF文件中;

    (2) Variables: 如果一个指令是以小写字母开头,并且是以key=value对的形式,如:version=3.0, 将被认

    为是属性的一个替换,不会出现在MAIFEST.MF中;

    (3) Directives: 如果一个指令是以"-"开头,则是告诉BND执行特殊的操作,不会被出现在MAIFEST.MF中。

2. Instructions:指令

    (1) Export-Package

    该指令明确指明该Bundle需要Export的Packae, 这些Package将出现在MAINFST.MF文件中,有可能Export

    某些Package,但这些Package却不在当前Project中。同时在Export-Package时有额可以使用"*", 为了排除

    某些不需要Export-Package的Package,可以使用"!",在使用这些Package Pattern时,是有前后顺序关系的,

    前面声明的Pattern优先于后面的 Pattern。例如:

    “org.foo.*”,!org.foo.impl",其中第二个Pattern将不起作用,应该声明成:

    “!org.foo.impl,org.foo.*”

    根据OSGi 规范的语义,Package Pattern可以包含指令和属性,指令和属性都将被Copy至MANIFEST.MF文

    件中,除了需要明确指明Package Version属性外,Bnd也能自动的根据JAR文件或者packageinfo文件决定

    Package  version.

    (2) Private-Package

    该指令用于指明Bundle 中不需要Export的Package,如果一个Package即被Export Pattern 又被PrivatePattern

    匹配,则Export Pattern优先。

    (3) Import-Package

    该指令用于指明Bundle需要的 Package,默认值为:"*",意为Import 所有Reference的Package;如果不需要

    Import 某个Package,可以使用"!", 这个Package Pattern与Export-Package是一样的,即有前后关系,如过你

    想Import所有的Package除了了org.foo.impl,则可以声明为:

    "!org.foo.impl,*"   

    (4) Include-Resource

    请参考官方文档:http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

3. Default Behavior

    maven-bundle-plguin指定了MAINFEST.MF文件中某些Header的默认值:

    (1) <Bundle-SymbolicName> :使用Maven2OsgiConverter组件生成,它使用下面的算法:
    默认:groupId + ".“ + artifactId ,但有以下例外:
    如果artifact.getFile不是空的, 并且JAR文件包含的OSGi的Bundle-SymbolicName属性,那么将直接返回该值;
    A. 如果的groupId只有一个部分(不含".")并且artifact.getFile不为空,那么使用包含类的第一个包名被返回。如:  

    commons-logging:commons-logging -> org.apache.commons.logging
    B. 如果artifactId的最后一部分与groupId相同,则groupId返回。如:org.apache.maven:maven - >

    org.apache.maven;
    C. 如果artifactId是以groupId的最后一部分作为开头,则groupId那部分被删除,只返回其他部分,

    如:org.apache.maven-core - > org.apache.maven.core
    symbolic name可以被存储在$(maven-symbolic-name)属性中,可以给他添加属性或指令。

    D. 设置bundle symbolic name:

<plugin>
	<groupId>org.apache.felix</groupId>
	<artifactId>maven-bundle-plugin</artifactId>
	<configuration>
		<instructions>
			<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
			...
		</instructions>
	</configuration>
</plugin>

     (2) <Bundle-Name>:

     默认值为:${project.name},设置一个Bundle-Name:

<plugin>
	<groupId>org.apache.felix</groupId>
	<artifactId>maven-bundle-plugin</artifactId>
	<configuration>
		<instructions>
			<Bundle-Name>JoeFred</Bundle-Name>
			...
		</instructions>
	</configuration>
</plugin>

     (3) <Bundle-Version>

     默认值为:$ {pom.version },OSGi的版本格式MAJOR.MINOR.MICRO.QUALIFIER,,例如:

     4.2-SNAPSHOT --> 4.2.0.SNAPSHOT.

     设置Bundle-Version:

<plugin>
	<groupId>org.apache.felix</groupId>
	<artifactId>maven-bundle-plugin</artifactId>
	<configuration>
		<instructions>
			<Bundle-Version>1.0.3.1</Bundle-Version>
			...
		</instructions>
	</configuration>
</plugin>

     (4) <Export-Package>

     是您当地的Java源代码包,但不包括默认的包'.“以及部包含已'impl“或”internel“结尾的Package。例如:

     推荐:!com.fuse.demo.private,com.fuse.demo.*,不推荐:com.fuse.demo.*,!com.fuse.demo.private

     (5) <Private-Package>

     例如:

<plugin>
	<groupId>org.apache.felix</groupId>
	<artifactId>maven-bundle-plugin</artifactId>
	<configuration>
		<instructions>
			<Private-Package>org.apache.cxf.wsdlFirst.impl</Private-Package>
			...
		</instructions>
	</configuration>
</plugin>

     (6) <Import-Package>

     默认值为:*, 例如:

<plugin>
	<groupId>org.apache.felix</groupId>
	<artifactId>maven-bundle-plugin</artifactId>
	<configuration>
		<instructions>
			<Import-Package>javax.jws,
				javax.wsdl,
				org.apache.cxf.bus,
				org.apache.cxf.bus.spring,
				org.apache.cxf.bus.resource,
				org.apache.cxf.configuration.spring,
				org.apache.cxf.resource,
				org.springframework.beans.factory.config,
				*
			</Import-Package>
			...
		</instructions>
	</configuration>
</plugin>

     (7) <Include-Resource>

     从项目的Maven的资源目录:src /main/resource复制文件到指定的项目目录层次结构。
     (8) 其他默认设置

    <Bundle-Description> --> “ $ {pom.description }“;
    <Bundle-License> -->“ $ {pom.licenses }“;
    <Bundle-Vendor> -->“ $ {pom.organization.name }“;
    <Bundle-DocURL> -->“ $ {pom.organization.url }“.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值