关于使用 OSGi 设置 Maven 多模块项目的反馈
Feedback on Maven multi-module project setup with OSGi
我正在接触 OSGi 并尝试使用 Apache Felix 和 Maven 设置一个项目。我想使用多模块构建和声明式服务。该项目托管在 GitHub:osgi-maven-example(请注意,link 指向特定的提交,而不是存储库的 HEAD。)
我对项目的整体设置有一些疑问:
根据 Neil Bartlett,bnd-maven-plugin
应该优先使用 Apache Felix Bnd 插件,因为它尊重 Maven 的生命周期。从 bnd-maven-plugin 的年代来看,这似乎是一种相对较新的方法,因此我不确定这样做是否是个好主意。
我正在使用 Apache Felix 的声明式服务包 (org.apache.felix.scr.annotations
) 来定义我的组件。 maven-scr-plugin
使用这些注释来生成服务描述符,这些描述符通过使用 bnd.bnd
文件中的以下行包含在 MANIFEST.MF
中:Service-Component: OSGI-INF/*.xml
。这是声明式服务的使用方式吗?
IntelliJ 在 GermanGreeter
-class 中显示警告:
这到底是什么意思?我需要关心这个吗?我该如何解决?
虽然我对这个工作示例非常满意,但我很好奇我是否以预期的方式使用所有这些技术,如果我能在开始之前获得有关整体设置的一些反馈,我将不胜感激在更大的项目中使用它。
现在在包 org.osgi.service.component.annotations
下有一套官方的 DS 注释。这些注解被打包在jar"compendium"(org.osgi/cmpn)中,bnd有一个生成组件描述符的指令:-dsannotations : *
你的问题的第一部分取决于意见... maven-bundle-plugin
更多 "maven centric" :将它集成到 maven 构建中更容易。 bnd-maven-plugin
更 "bnd centric" :你操作标准的 bnd 文件,但它打破了一些 maven 约定。各有利弊
我同意 Jeremie 的意见,您应该使用标准化注释。它们可以与 felix maven-bundle-plugin 和 bnd-maven-plugin 一起使用。对于第一个示例,请参阅 Apache Karaf Tutorial part 10 - Declarative services. For the second this post from Neil 是一个很好的信息来源。您应该不需要 scr 插件。
maven-bundle-plugin 非常稳定且易于使用。它的问题在于它重新定义了 maven 生命周期,这可能会导致某些项目设置出现问题。 bnd-maven-plugin 在父级中需要更多的 maven xml,但它的优点是它更适合复杂的构建,因为它不会调整 maven。
我正在接触 OSGi 并尝试使用 Apache Felix 和 Maven 设置一个项目。我想使用多模块构建和声明式服务。该项目托管在 GitHub:osgi-maven-example(请注意,link 指向特定的提交,而不是存储库的 HEAD。)
我对项目的整体设置有一些疑问:
根据 Neil Bartlett,
bnd-maven-plugin
应该优先使用 Apache Felix Bnd 插件,因为它尊重 Maven 的生命周期。从 bnd-maven-plugin 的年代来看,这似乎是一种相对较新的方法,因此我不确定这样做是否是个好主意。我正在使用 Apache Felix 的声明式服务包 (
org.apache.felix.scr.annotations
) 来定义我的组件。maven-scr-plugin
使用这些注释来生成服务描述符,这些描述符通过使用bnd.bnd
文件中的以下行包含在MANIFEST.MF
中:Service-Component: OSGI-INF/*.xml
。这是声明式服务的使用方式吗?IntelliJ 在
GermanGreeter
-class 中显示警告:
这到底是什么意思?我需要关心这个吗?我该如何解决?
虽然我对这个工作示例非常满意,但我很好奇我是否以预期的方式使用所有这些技术,如果我能在开始之前获得有关整体设置的一些反馈,我将不胜感激在更大的项目中使用它。
现在在包 org.osgi.service.component.annotations
下有一套官方的 DS 注释。这些注解被打包在jar"compendium"(org.osgi/cmpn)中,bnd有一个生成组件描述符的指令:-dsannotations : *
你的问题的第一部分取决于意见... maven-bundle-plugin
更多 "maven centric" :将它集成到 maven 构建中更容易。 bnd-maven-plugin
更 "bnd centric" :你操作标准的 bnd 文件,但它打破了一些 maven 约定。各有利弊
我同意 Jeremie 的意见,您应该使用标准化注释。它们可以与 felix maven-bundle-plugin 和 bnd-maven-plugin 一起使用。对于第一个示例,请参阅 Apache Karaf Tutorial part 10 - Declarative services. For the second this post from Neil 是一个很好的信息来源。您应该不需要 scr 插件。
maven-bundle-plugin 非常稳定且易于使用。它的问题在于它重新定义了 maven 生命周期,这可能会导致某些项目设置出现问题。 bnd-maven-plugin 在父级中需要更多的 maven xml,但它的优点是它更适合复杂的构建,因为它不会调整 maven。