java - Karaf 包在部署时未从 .kar 加载

标签 java osgi apache-karaf apache-servicemix

我有一个 Karaf 应用程序,在 .kar 文件中包含三个 bundle ,由 features.xml 指定。

当我在目标虚拟机上部署已编译的 .kar(使用 maven 插件)时,主 bundle 在 Karaf 中加载和更新,但似乎未提取和部署依赖 bundle (附加功能) - Karaf 尝试从/system/存储库而不是 .kar 获取 bundle 。

部署在我的开发机器上工作,我怀疑依赖包是从本地 Maven 存储库中提取的,由于构建过程,该存储库是最新的。

目前,要在目标计算机上解决此问题,我必须将本地存储库复制到 [karaf.root]/system/文件夹,以便在 .kar 热部署时更新所有 bundle 。

有谁知道如何配置功能 .xml,以便从 .kar 中提取 bundle ,而不是[最初]从/system 文件夹中提取? 我的 features.xml 文件是;

<features name="${project.artifactId}-${project.version}"
xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.3.0 http://karaf.apache.org/xmlns/features/v1.3.0">

<feature name="${project.artifactId}" install="auto" version="${project.version}"
    description="${project.description}">
    <bundle dependency="true">mvn:com.google.code.gson/gson/${gson.version}</bundle>
    <bundle>mvn:uk.co.company.product/product-common-api/${project.version}</bundle>
    <bundle>mvn:uk.co.company.product/product-core-services/${project.version}</bundle>
    <bundle>mvn:uk.co.company.product/product-scenario-exporter/${project.version}</bundle>

<feature prerequisite="true">camel-jetty</feature>
<feature prerequisite="true">webconsole</feature>
</feature>

我已经检查过,所需的包(即 common-api)包含在已编译的 kar 文件的存储库文件夹中。

最佳答案

您只需使用您需要的 bundle 的 mvn url 即可。 kar 的内容将是此类依赖性的来源之一。我假设你的 kar 有错误。您可以在这里发布您的 kar 文件(也许精简为中性内容)?

你的kar里面的文件结构是什么?它应该包含一个目录存储库,内部应该有子目录和 jar,就像在 Maven 存储库中一样。只有这样,mvn url 才会被解析。

关于java - Karaf 包在部署时未从 .kar 加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44942382/

相关文章:

java - @RunWith(MockitoJUnitRunner.class) 与 MockitoAnnotations.initMocks(this)

java - 文件选择器(Swing)

java - 在不同的包中实现数据库 JPA 和 JPA 客户端类(Apache Karaf 和 OpenJPA)

osgi - 无法捕获 Apache Karaf 客户端输出

java - 如何在不出现 ClassCastException 的情况下在另一个 OSGi 包中公开一个 OSGi 包中的服务

java - 未生成 Jersey Jackson JSON 类名

java - 在一个 JPanel 中包含的多个 JPanel 中绘图

java - 使用 volatile 关键字创建一个实例

osgi - 如何使用 Maven bundle 插件从包中排除包

java - Apache ServiceMix 7,ScalaDSL,未找到方案 : jetty 的组件