用Maven开发OSGI Bundle

可能99%用Java开发软件的同学都会用Eclipse来作为开发用IDE,特别是开发OSGI方面的,可能更有可能用Eclipse。但很不幸,可能是因为早期对Eclipse的“童年”阴影,对Eclipse大量强大的功能,觉得学习繁琐,所以本人对Eclipse有点抗拒,当然这只是个人的感受:)。

    那么不用Eclipse,我可以用什么呢?总不能用文本编辑器来写代码吧,所以我选择了netbean作为我的IDE,因为我感觉它用起来比较简单。但IDE通常会有自己的工程组织方式,所以Eclipse的工程要放在netbean上用,或者反之,都不是很方便。所以我又选择用了Maven。

    相信Maven是目前开源项目中最普遍使用的一套项目管理工具。既然是这样,我们为什么要将我们的项目和IDE捆绑在一起,为什么不统一用这个最流行的工具来构建一个项目工程,而是采用特定于某个IDE的方式来构建工程呢?

    在Netbean里,我们可以直接打开Maven工程,而在Eclipse里,则只需用mvn eclipse:eclipse就可以将Maven工程转化成一个Eclipse工程。

    开始开发OSGI Bundle时,自然也就想到用Maven来构建工程。首先,Bundle本身就是一个JAR包,它和普通JAR包的区别主要在于Manifest.mf上,所以,要构建Bundle,直接沿用构建JAR包的方式即可,再加上最方便处理Manaifest.mf的功能即可,于是,就有了一下这样的模板(POM.XML):

Java代码   收藏代码
  1. <project xmlns:pom="http://maven.apache.org/POM/4.0.0">  
  2.     <modelVersion>4.0.0</modelVersion>  
  3.     <properties>  
  4.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  5.     </properties>  
  6.     <groupId>com.ponder.tutorials.app01</groupId>  
  7.     <artifactId>Calculator</artifactId>  
  8.     <packaging>jar</packaging>  
  9.     <version>1.0</version>  
  10.     <name>app01-Calculator</name>  
  11.     <url>http://app01.ponder.com/Calculator/</url>  
  12.     <build>  
  13.         <plugins>  
  14.             <plugin>  
  15.                 <groupId>org.apache.maven.plugins</groupId>  
  16.                 <artifactId>maven-compiler-plugin</artifactId>  
  17.                 <version>2.3.2</version>  
  18.                 <configuration>  
  19.                     <source>1.6</source>  
  20.                     <target>1.6</target>  
  21.                     <encoding>${project.build.sourceEncoding}</encoding>  
  22.                 </configuration>  
  23.             </plugin>  
  24.             <plugin>  
  25.              <groupId>org.apache.maven.plugins</groupId>  
  26.               <artifactId>maven-jar-plugin</artifactId>  
  27.                <configuration>  
  28.                 <archive>  
  29.                  <manifest>  
  30.                   <addClasspath>true</addClasspath>  
  31.                   <classpathPrefix>lib/</classpathPrefix>  
  32.                  </manifest>  
  33.                  <manifestEntries>  
  34.                   <Class-Path>${project.build.finalName}.jar</Class-Path>  
  35.                   <Built-By>Ponder</Built-By>  
  36.                   <Bundle-ManifestVersion>2</Bundle-ManifestVersion>  
  37.                   <Bundle-Name>  
  38.                    ${project.groupId}.${project.ArtifactId}  
  39.                   </Bundle-Name>  
  40.                   <Bundle-SymbolicName>${project.name}</Bundle-SymbolicName>  
  41.                   <Bundle-Version>${project.version}</Bundle-Version>  
  42.                   <Bundle-Vendor>${project.groupId}</Bundle-Vendor>  
  43.                   <Bundle-Activator>  
  44.                    ${project.groupId}.${project.ArtifactId}.Activator  
  45.                   </Bundle-Activator>  
  46.                   <Export-Package>  
  47.                    ${project.groupId}.${project.ArtifactId}.Export  
  48.                   </Export-Package>  
  49.                   <Import-Package>org.osgi.framework</Import-Package>  
  50.                   <Embed-Dependency>*</Embed-Dependency>  
  51.                   <DynamicImport-Package>*</DynamicImport-Package>  
  52.                  </manifestEntries>  
  53.                 </archive>  
  54.               </configuration>  
  55.             </plugin>  
  56.         </plugins>  
  57.     </build>  
  58.     <dependencies>  
  59.         <dependency>  
  60.             <groupId>org.slf4j</groupId>  
  61.             <artifactId>slf4j-api</artifactId>  
  62.             <version>1.6.4</version>  
  63.             <type>jar</type>  
  64.         </dependency>  
  65.         <dependency>  
  66.             <groupId>org.osgi</groupId>  
  67.             <artifactId>org.osgi.core</artifactId>  
  68.             <version>4.2.0</version>  
  69.             <type>jar</type>  
  70.         </dependency>  
  71.     </dependencies>  
  72. </project>  


    其中用了maven-jar-plugin,通过这个plugin的Configuration/archive/manifest的配置,就可以很方便地设置Bundle所需的Manifest项,打包时会自动创建manifest.mf。

    当然以上只是最基础的部分,我们还可以基于Maven提供的Surefire插件做Bundle的单元测试,利用Maven的父项目来将一组相关联的Bundle项目组合成一个大的项目,还可以将Maven的repository当作OSGI的OBR(OSGI Bundle Repository),用于Bundle的部署发布方面。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值