如何使用 maven 项目轻松部署到 Karaf Osgi 容器

Posted

技术标签:

【中文标题】如何使用 maven 项目轻松部署到 Karaf Osgi 容器【英文标题】:How to deploy easily to Karaf Osgi container with maven project 【发布时间】:2014-04-10 20:50:26 【问题描述】:

我正在开发一个 OSGI 包,用于使用 PDFBox 库解析 PDF 文件。我使用 maven 构建项目并使用 Karaf 作为 OSGI 容器。 PDFBox 库与 OSGI 兼容,所以我认为这很容易。但我就是无法正确部署模型。

在传统的 Web 应用程序中,我会构建一个包含所有依赖项的单个 WAR 文件,并将其放入 Servlet 容器中,然后它就会被部署。另一方面,我想出如何安装 osgi 包的唯一方法是手动完成。我必须创建一个安装说明文件,列出所有必须手动下载并复制到 Karaf 部署文件夹的依赖项,并确保以正确的顺序进行。我觉得我回到了石器时代。

一定有更简单的方法,对吧?我仍然使用 maven 来声明依赖项,但我只需要使用提供的范围。如果这些依赖可以自动安装就好了。

我正在使用 maven-bundle-plugin 从我的应用程序中生成一个包。它确实生成了一个 OBR 存储库(repository.xml),我尝试使用 obr karaf 插件安装我的包,但它仍然没有帮助解决依赖关系。

【问题讨论】:

【参考方案1】:

提供捆绑包有不同的可能性。我更喜欢通过 Karaf 控制台使用 Maven 安装包,例如:

install mvn:org.apache.pdfbox/pdfbox/1.8.4

如果您不想一个一个地安装每个捆绑包,您可以使用所谓的 features,如 here 所述。一个特性列出了所有需要的包:

<feature name='my-project' version='1.0.0'>
    <feature version='2.4.0'>camel-spring</feature>
    <bundle start-level='80' start='false'>mvn:com.mycompany.myproject/myproject-dao</bundle>    
    <bundle start-level='85' start='false'>mvn:com.mycompany.myproject/myproject-service</bundle>
    <bundle start-level='85' start='false'>mvn:com.mycompany.myproject/myproject-camel-routing</bundle>
</feature> 

您通过 Karaf 控制台添加功能:

features:addUrl mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.0.0-m2/xml/features
features:install nmr

除了mvn 处理程序,您还可以使用file 处理程序:

features:addUrl file:base/features/features.xml

【讨论】:

如何创建 features.xml 文件?手工? 是的。至少我不知道是否还有另一种可能。 Karaf Maven 插件确实有助于从依赖项构建功能文件,但通常最好手动微调这些功能。 我完全同意彼得和阿奇姆的观点。功能文件是在 Karaf 中部署应用程序的最佳方式。我还手动构建功能文件。通常,您会引用现有的功能,例如 camel 或 cxf。所以大多数时候功能文件都很小。 我调查了 karaf maven 插件,当您手动创建功能文件时,似乎您最终会遇到更少的麻烦。虽然它确实有一个有趣的特性,它可以构建 kar-archive,其中包括它可以从 features.xml 文件中解析的 maven 依赖项。当您无法在生产服务器上下载依赖项时,它很有用。

以上是关于如何使用 maven 项目轻松部署到 Karaf Osgi 容器的主要内容,如果未能解决你的问题,请参考以下文章

在 Netbeans 和 Karaf 中开发 OSGI 包时如何管理依赖关系?

eclipse中maven项目如何部署到tomcat

我的项目是maven+jetty开发的现在想把maven项目部署到tomcat上改如何配置

使用 maven 部署 javafx hsqldb 项目

干货 | 用maven轻松管理jar包

maven部署项目到tomcat