2016-02-19 72 views
2

我正在与OSGi取得联系并尝试使用Apache Felix和Maven设置项目。我想使用多模块构建和声明式服务。该项目托管在GitHub上:osgi-maven-example(请注意,该链接指向一个具体的承诺,而不是仓库的负责人。)关于使用OSGi的Maven多模块项目设置的反馈

我已经得到关于该项目的总体设置了几个问题:

  • 根据Neil Bartlettbnd-maven-plugin应该优先用于Apache Felix Bnd插件,因为它尊重Maven的生命周期。从bnd-maven插件的时代来看,这似乎是一种相对较新的方法,因此我不确定这是否是一个好主意。

  • 我使用Apache Felix的声明性服务包(org.apache.felix.scr.annotations)来定义我的组件。这些注释被maven-scr-plugin用于通过使用bnd.bnd文件中的以下行来生成包含在MANIFEST.MF中的服务描述符:Service-Component: OSGI-INF/*.xml。这是声明式服务意图使用的方式吗?

  • 的IntelliJ显示在GermanGreeter -class警告: intellij-warning
    究竟是什么意思?我需要关心这个吗?我该如何解决它?

虽然我在这个工作示例很高兴,我很好奇,如果我使用他们的预期的方式,所有这些技术,我会很感激,如果我能得到一些反馈的整体设置我之前开始在更大的项目中使用它。

回答

3

现在有一套正式的DS注释集,包。这些注释包装在罐子“纲要”(org.osgi/CMPN),并BND具有一个指令生成组件描述:-dsannotations : *

你的问题的第一部分是受到意见...... maven-bundle-plugin即是多“ maven centric“:将它集成到maven build中更容易。 bnd-maven-plugin更“以结果为中心”:你操纵标准的bnd文件,但它打破了一些maven惯例。都有优势和不便

+0

感谢您对官方注释包的暗示。关于bnd插件:是不是完全相反?据我所知,bundle插件是否自己创建了一个jar实际上是jar插件的工作。 –

+0

是的,maven-bundle-plugin定义了一个新的包装和一个新的生命周期,但这个包装并不是强制性的(参见'manifest'目标)。 bnd-maven-plugin使用更简单,因为它不会改变生命周期/包装,但它缺少其他的东西。例如它的配置不遵循“maven方式”(单点配置 - pom.xml),或者继承项目之间的配置(maven仓库中的共享bnd文件)。都有亲&con –

+0

谢谢澄清! –

1

我同意杰勒米你应该使用标准化的注释。它们可以与felix maven-bundle-plugin以及bnd-maven-plugin一起使用。有关第一个示例,请参阅Apache Karaf Tutorial part 10 - Declarative services。对于第二个this post from Neil是一个很好的信息来源。你不应该需要scr插件。

maven-bundle-plugin相当稳定且易于使用。问题在于它重新定义了可能导致某些项目设置出现问题的Maven生命周期。 bnd-maven-plugin在父级需要更多的maven xml,但其优点是它更适合复杂构建,因为它不会调整maven。

+0

我已阅读并在我的问题中也引用了此博客文章。但是,如果我没有配置scr插件,则不会生成服务描述符,并且在部署捆绑包后服务也不会启动。 –

+1

您需要启用规格注释支持。对于maven-bundle-plugin以及bnd-maven-plugin,你可以在bnd.bnd文件中使用“-dsannotations:*”来做到这一点。就像Je​​remy解释的...当然你需要使用规范注释 –

+0

我已经在我的.bnd文件中有这一行。所以它应该尽快切换到官方注释? –