2013-03-31 103 views
9

我想构建一个兼容OSGi的多模块应用程序,其中编译后在3个文件夹中具有所有必需的捆绑软件。我正在使用maven-bundle-pluginmaven-scr-plugin来创建捆绑包。使用Maven构建OSGi应用程序

我想要的是使用单个命令在希望的脚本中使用脚本在osgi容器(Equinox)中运行此应用程序。为此,我相信我必须创建一个config.ini文件列出应用程序中的所有软件包。

有没有一种方法可以在Maven编译时生成它?还是有更好的方式来获取某些文件夹结构中的所有包,以便应用程序可以立即运行?

+0

如果这只用于开发,可以使用Pax构造函数(https://ops4j1.jira.com/wiki/display/paxconstruct/Pax+Construct),它是PaxRunner和其他一些Maven的好东西。 –

回答

4

我写了一个maven插件,默认情况下在目标下创建dist文件夹,该文件夹包含所有maven依赖关系的随时可用equinox。 Equinox使用YAJSW包装,因此您可以将生成的equinox程序包用作测试服务器。请参阅插件使用页面:http://www.everit.org/eosgi-maven-plugin/

该文档有点差,但如果您有任何问题,请不要犹豫,问。

短一步一步的指导:

  • 退房https://github.com/everit-org/osgi-samples-simple(用户:客人,通过:客人)
  • 运行 “MVN安装”。这将在模块测试/核心中的target/eosgi-itests-dist/equinox中生成一个测试equinox环境。
  • 如果你想拥有一个简单的不带测试模块的Equinox服务器,你可以在tests/core模块上运行命令“mvn eosgi:dist”。

编辑

一个新的菜谱将包含更详细的一步一步的指导很快面市。网址是http://cookbook.everit.org

10

您可以在OSGi Maven项目中使用带有PaxRunner的maven-pax插件。详情请查看tutorial

<plugin> 
<!-- Pax Runner Maven plugin --> 
<groupId>org.ops4j</groupId> 
<artifactId>maven-pax-plugin</artifactId> 
<version>1.4</version> 
<configuration> 
     <!-- Pax Runner version --> 
     <runner>1.4.0</runner> 
     <!-- OSGi framework type (equinox, felix, knopflerfish) --> 
     <framework>equinox</framework> 
     <provision> 
      <param>--log=debug</param> 
      <param>--workingDirectory=target/runner</param> 
      <!-- bundles that should be installed --> 
      <param>mvn:org.osgi/org.osgi.compendium/[email protected]</param> 
      <param>mvn:org.apache.felix/org.apache.felix.eventadmin/[email protected]</param> 
      <param>mvn:org.apache.felix/org.apache.felix.log/[email protected]</param> 
     </provision> 
</configuration> 
</plugin> 
+0

是否可以有多个配置,即一个用于felix,另一个用于春分?我尝试通过maven属性设置框架,但felix和equinox具有不同的依赖关系(例如对于声明式服务)。 – mike

+0

你可以使用maven配置文件 –