如何使用 Maven 将第 3 方 OSGi 捆绑包添加到部署包中?

Posted

技术标签:

【中文标题】如何使用 Maven 将第 3 方 OSGi 捆绑包添加到部署包中?【英文标题】:How do I add 3rd-party OSGi bundles to a deployment package with Maven? 【发布时间】:2010-12-06 23:50:40 【问题描述】:

我正在构建我的应用程序以在 OSGi 容器中运行。我使用 Maven 和 Apache Felix 的 Maven Bundle Plugin 为我自己的模块设置 OSGi 清单,效果很好。

现在,我将我的捆绑包连同几个第 3 方库一起部署到一个 OSGi 容器中。当我从 Maven 存储库中获取它们时,其中一些已经是 OSGi 的,其他的,我想转换为 OSGi 兼容的 jar。我想建立一个 Maven 项目来收集所有依赖项,并将每个依赖项放在自己的 OSGi jar 中。最终目标是将这些 jar 和我自己的 jar 收集到一个可以用作独立部署包的程序集中。

我知道如何使用convert standard jars to OSGi jars,并且我对merge multiple OSGi bundles 有一种(有点骇人听闻的)方法,即使我可能不应该这样做。但是,如果我有一个已经很好的依赖项,并且我只想将它从 repo 复制到我的程序集中,那么我使用 Maven 的哪个部分?捆绑插件是错误的,如果依赖项已经与 OSGi 兼容,它会弄乱清单。我是使用依赖插件、程序集插件还是其他东西?

我觉得我在这里忽略了一些非常简单的事情。

【问题讨论】:

【参考方案1】:

我们使用了许多未经供应商 OSG 化且在 Spring 捆绑存储库中不可用的库。我们也有许多这样的,并希望将它们一起部署起来无忧无虑。为此,我们创建了一个 2 层 maven 设置:

    下载或包含(视“系统”范围而定)相关第 3 方库的单个 maven 项目,并使用 Apache Felix bundle plugin 对这些项目进行 OSG 化 一个容器项目依赖于所有这些小项目,并使用核心 assembly maven plugin 将它们组合在一起。此 POM 还使用 maven 的复制依赖目标来确保一切就绪。

一旦它变成一个程序集(我们的是一个 tar 文件),我们就会将它部署到我们的服务器上。我们更进一步,将这个第 3 方库的组件用作我们的 Eclipse 构建环境的目标平台。但这可能与您无关。

【讨论】:

第 2 步是我要求的,第 1 步也很有帮助。谢谢。【参考方案2】:

您看过 PAX 工具吗?特别是Pax-Runner 和 pax-construct...他们不仅为您提供了一个不错的模板,而且还免费解决了您提到的大多数问题。

【讨论】:

我也推荐 Pax 工具套件。 哇,它们看起来确实不错,但我现在不得不推迟。我对 Maven 感觉很好,目前,我应该交付而不是获得更多工具。无论如何,很好的提示!【参考方案3】:

您可以从 Spring 捆绑存储库中获取许多常见工件的 OSGi 友好版本。所以你可能不必自己做。

查看how to configure Maven 捆绑存储库的详细信息。

(将更新一些尚未作为捆绑包提供的想法)

【讨论】:

不,我知道如何得到它们。我想知道如何使用 Maven 自动将它们包含在部署包和/或测试环境中。 对不起,我想我不明白你到底想做什么

以上是关于如何使用 Maven 将第 3 方 OSGi 捆绑包添加到部署包中?的主要内容,如果未能解决你的问题,请参考以下文章

在 OSGi 包中添加第三方 Maven 依赖项的最佳方法

OSGI - 处理 3rd 方 JAR 及其依赖项

我正在尝试使用 maven 创建一个 OSGI 包。我无法正确捆绑 JAR

无法运行具有Maven依赖关系的OSGi捆绑软件

使用 OSGI 从 Ant 迁移到 Maven?

如何在非 Tycho 项目中使用 pomless tycho 工件