使用 Maven、OSGi 和 Bndtools

Posted

技术标签:

【中文标题】使用 Maven、OSGi 和 Bndtools【英文标题】:Working with Maven, OSGi and Bndtools 【发布时间】:2012-05-20 23:49:25 【问题描述】:

今天有人问我在我们当前的 OSGi 应用程序中使用 Maven 是否是个好主意。我们使用了 Bndtools,它很棒,因为它使开发尽可能简单。 Bndtools 使用 OBR 来维护其他包和依赖解析,即使在应用程序运行期间也是如此。

由于 Maven 广泛传播并且如此受欢迎,大多数人也尝试在 OSGi 环境中使用它。对我来说,这是两种不同的方法。 OSGi 有自己的依赖声明,MANIFEST.MF 和 Maven 一个 pom,您可以在其中声明它们。所以如果你同时使用它们,你将声明依赖两次。当然,您可以使用 Apache OSGi Maven 插件来避免它,Maven 负责创建 MANIFEST.MF。但是 Maven 存储库并不真正关心捆绑包。因此,您可能会引用非捆绑 jar。

当然,使用 Maven 是有好处的,但是将它与 OSGi 或特别是与 Bndtools 结合起来真的是一件好事吗?

谁能提供优点或缺点!有人使用这两种方法的实际经验吗?

【问题讨论】:

嗨,克里斯蒂安。感谢您提出问题并使用 Bndtools。我知道 Maven 支持仍然有点缺乏,但我们目前正在积极努力。关于最佳方式的争论一直存在。当然,我们希望避免两次声明依赖项,因此 POM 将成为构建部门的“主”。无论如何,请继续关注邮件列表,因为我们将在 6 月初发布一些公告。也请继续提供您的反馈和建议。谢谢! 嗨,尼尔。谢谢回答我的问题。我在等你的消息;) Bndtools 太棒了,在我看来,我们不需要将 Maven 与 Bndtools 结合使用。该工具构建所有 jar 并创建 MANIFEST.MF,与 Maven 所做的相同,但我不需要在额外的 pom 文件中指定某些内容。您说如果我们同时使用两者,我们将声明依赖关系两次,这是绝对正确的。等不及你在 Bndtools 上的下一个版本了!!!谢谢! 【参考方案1】:

我认为,如果您所做的几乎所有事情都以 Maven 为中心,那么 Apache Felix Maven 插件(顺便说一下,也是基于 BND)是不错的选择。

否则,如果您想使用 Maven,但扮演的角色不那么重要,Eclipse Tycho 很有意义。 Tycho 是一组 Maven 插件。

使用 Tycho,您将目标平台从 Eclipse 提供给 Maven,然后它可以通过查看您的 MANIFEST 和目标平台来解析所有捆绑包。 pom.xml 文件对于 Tycho 项目非常简单,因为它们不包含您的依赖项。

Tycho 显然非常以 Eclipse 为中心。如果你不使用 eclipse 我认为它没有多大意义,但有时它更容易合并到现有项目中。

无论哪种方式,您仍然可以使用 Apache Felix Maven 插件在部署阶段生成 OBR 元数据。

【讨论】:

【参考方案2】:

我认为在 OSGi 项目中使用 Maven 效果很好。您可以使用Felix Maven BND plugin 让您的生活更轻松。有了这个,maven 可以在本地(或远程)maven 存储库中自动生成 OBR 元数据。这使您也可以将 Maven 存储库视为 OBR。它使 OSGi 项目的工作流程与其他项目相同,并且一切都非常无缝且相当易于使用。

我们在工作中使用它,而 Maven 确实让事情变得更容易使用。例如,我们使用 Maven 生成 Eclipse 项目文件,在 CI 服务器上运行自动构建,并创建 OBR 元数据。

【讨论】:

感谢@Oleksi 为您解答。不知道,使用 Maven 可以生成 OBR 元数据。但是由于我们使用 Bndtools,所有这些事情也都完成了。包含所有信息的包的创建过程以及 OBR 元数据的创建。 我从来没有使用过 Bndtools,所以我真的不知道它有什么能力。但是,我知道 Maven 过去为我们提供了很好的服务,并且得到了很多行业的支持。 你用的是哪个版本的maven? 3,但也与 2 一起工作了一段时间,效果很好。 @Oleksi:在 pom 文件中为 MANIFEST.MF 指定整个 OSGi 内容有多难,因为它是纯 XML?因为使用 Bndtools,您可以编写带有特殊注释的 POJO 类,并且您的 MANIFEST.MF 是在构建过程中自动生成的,它只使用注释。但是我从 Neil Bartlett link 那里发现了一篇有趣的文章,它也在 Bntools 上启用了 Maven 支持。如果尼尔能在这里阅读问题并告诉我们他的意见,那就太好了:)【参考方案3】:

对于现在提出这个问题的人来说,距离最初提出这个问题已经过去了很长时间。上面 Neil Bartlett 提到的 Maven 工作已经成熟,现在 Bnd/Bndtools 和 Maven 之间有很好的集成,包括一个用于 Eclipse/Bndtools 的 m2e 连接器。

Neil 与 Tim Ward 共同创作了一张幻灯片:

https://www.slideshare.net/mfrancis/bndtools-and-maven-a-brave-new-world-n-bartlett-t-ward

【讨论】:

以上是关于使用 Maven、OSGi 和 Bndtools的主要内容,如果未能解决你的问题,请参考以下文章

OSGi Felix 和 BndTools - 按名称加载类

BndTools,如何添加非 OSGi JAR?

BndTools,如何添加非 OSGi JAR?使用普通 JAR 会破坏整个项目。缺少要求接线包

Liferay7 BPM门户开发之38: OSGi Bndtools开发入门

osgi (bndtools) 中的 Restlet 包无法启动。激活程序错误 com/sun/net/httpserver/HttpHandler

bndtools教程