【问题标题】:Feedback on Maven multi-module project setup with OSGi关于使用 OSGi 设置 Maven 多模块项目的反馈
【发布时间】:2016-06-01 07:54:12
【问题描述】:

我正在与 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 使用这些注释来生成服务描述符,这些描述符通过使用bnd.bnd 文件中的以下行来包含在MANIFEST.MF 中:Service-Component: OSGI-INF/*.xml。这是声明式服务的使用方式吗?

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

虽然我对这个工作示例感到非常满意,但我很好奇我是否按照预期的方式使用所有这些技术在一个更大的项目中。

【问题讨论】:

    标签: java maven osgi apache-felix bnd


    【解决方案1】:

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

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

    【讨论】:

    • 感谢官方注解包的提示。关于 bnd 插件:不完全相反吗?据我所知,bundle 插件是否自己创建了一个 jar,这实际上是 jar 插件的工作。
    • 是的,maven-bundle-plugin 定义了一个新的包装和一个新的生命周期,但是这个包装不是强制性的(参见“清单”目标)。 bnd-maven-plugin 使用起来更简单,因为它不会改变生命周期/打包,但它缺少其他东西。例如,它的配置不遵循“maven 方式”(单点配置 - pom.xml),或在项目之间继承配置(maven repo 中的共享 bnd 文件)。都有利有弊
    • 感谢您的澄清!
    【解决方案2】:

    我同意 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。

    【讨论】:

    • 我已经阅读并在我的问题中引用了这篇博文。但是,如果我不配置 scr 插件,则不会生成服务描述符,并且一旦我部署包,服务也不会启动。
    • 您需要启用规范注释支持。对于 maven-bundle-plugin 和 bnd-maven-plugin,您可以使用“-dsannotations: *”在 bnd.bnd 文件中执行此操作。就像 Jeremy 解释的那样......当然你需要使用规范注释
    • 我的 .bnd 文件中已经有了这一行。所以一旦我切换到官方注释它应该可以工作?
    • 我一使用官方注解就自动生成服务描述符,谢谢!
    • 您答案中的链接已损坏。
    猜你喜欢
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多