2

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

我对项目的整体设置有几个问题:

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

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

  • IntelliJ 在GermanGreeter-class 中显示警告: 这到底是什么意思?我需要关心这个吗?我该如何解决?智能警告

尽管我对这个工作示例感到非常满意,但我很好奇我是否以他们预期的方式使用所有这些技术,如果我能在开始在更大范围内使用它之前获得有关整体设置的一些反馈,我将不胜感激项目。

4

2 回答 2

3

现在有一组官方的 DS 注释,在 package 下org.osgi.service.component.annotations。这些注释被打包在 jar "compendium" (org.osgi/cmpn) 中,并且 bnd 有一个指令来生成组件描述符:-dsannotations : *

您问题的第一部分受制于意见......maven-bundle-plugin更“以maven为中心”:将它集成到maven构建中更容易。bnd-maven-plugin更“以 bnd 为中心”:您操作标准 bnd 文件,但它违反了一些 maven 约定。各有利弊

于 2016-02-19T17:24:34.183 回答
1

我同意 Jeremie 的观点,即您应该使用标准化的注释。它们可以与 felix maven-bundle-plugin 以及 bnd-maven-plugin 一起使用。有关第一个示例,请参阅Apache Karaf 教程第 10 部分 - 声明式服务。其次,尼尔的这篇文章是一个很好的信息来源。你不应该需要 scr 插件。

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

于 2016-02-19T18:34:18.967 回答