我正在与OSGi取得联系并尝试使用Apache Felix和Maven设置项目。我想使用多模块构建和声明性服务。该项目托管在GitHub上:osgi-maven-example(请注意,该链接指向特定的提交,而不是指向存储库的HEAD。)
关于项目的整体设置,我有几个问题:
根据Neil Bartlett,bnd-maven-plugin
应优先使用Apache Felix Bnd插件,因为它尊重Maven的生命周期。从bnd-maven-plugin的年龄来看,这似乎是一种相对较新的方法,因此我不确定这样做是否是个好主意。
我使用Apache Felix的声明性服务包(org.apache.felix.scr.annotations
)来定义我的组件。 maven-scr-plugin
使用这些注释生成服务描述符,通过使用MANIFEST.MF
文件中的以下行生成bnd.bnd
中的服务描述符:Service-Component: OSGI-INF/*.xml
。这是使用声明性服务的方式吗?
虽然我对这个工作示例感到非常高兴,但我很好奇我是否按照预期的方式使用了所有这些技术,如果能在我开始使用它之前得到一些关于整体设置的反馈,我将非常感激。在一个更大的项目中。
答案 0 :(得分:3)
在org.osgi.service.component.annotations
包下,DS现在有一套正式的注释。这些注释包装在jar" compendium" (org.osgi / cmpn),和bnd有一个生成组件描述符的指令:-dsannotations : *
你的问题的第一部分受到意见的影响...... maven-bundle-plugin
更多" maven centric" :将它集成到maven构建中更容易。 bnd-maven-plugin
更多"以中心为主题" :你操纵标准的bnd文件,但它破坏了一些maven惯例。两者都有优势和不便
答案 1 :(得分:1)
我同意Jeremie你应该使用标准化的注释。它们既可以与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。