使用OSGi对Maven多模块项目设置的反馈

时间:2016-02-19 16:46:12

标签: java maven osgi apache-felix bnd

我正在与OSGi取得联系并尝试使用Apache Felix和Maven设置项目。我想使用多模块构建和声明性服务。该项目托管在GitHub上:osgi-maven-example(请注意,该链接指向特定的提交,而不是指向存储库的HEAD。)

关于项目的整体设置,我有几个问题:

  • 根据Neil Bartlettbnd-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。这是使用声明性服务的方式吗?

  • IntelliJ在GermanGreeter - 类中显示警告: intellij-warning
    这到底是什么意思?我需要关心这件事吗?我该如何解决?

虽然我对这个工作示例感到非常高兴,但我很好奇我是否按照预期的方式使用了所有这些技术,如果能在我开始使用它之前得到一些关于整体设置的反馈,我将非常感激。在一个更大的项目中。

2 个答案:

答案 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。