在 Apache Karaf 中更新 wrapped-maven jar 的正确方法是什么?

What is the correct way to update wrapped-maven jar in Apache Karaf?

我创建了一个 OSGI bundle A 和一个 jar B,A 依赖于 B。 我还在 Karaf 4.1.1 上成功部署了 A 和 B。 B 部署为包装的 maven jar (bundle:install -s mvn:....)。

现在B有一些变化,所以我把它重新部署到我们的Nexus服务器上,我也想把新的B部署到Karaf中。

但是我发现,如果我在Karaf中只更新B,即使我重启了A,A仍然在使用旧的B。 我必须卸载并重新安装 B 才能让 A 使用新的 B。

由于 B 是一个公共库,因此会有许多其他包依赖于 B。 B 也被我们的其他非 OSGI 应用程序使用,所以我不想将它作为 OSGI 包。

这是在 Karaf 中更新 wrapped-maven Jar 的正确方法吗? 或者有什么建议?

问题与 "wrapped component" 无关。使用 wrap 协议安装后,jar 被视为普通的 OSGI 包。

但是,请记住,Karaf 手表仅从 SNAPSHOT 捆绑包更改

所以:

  • 在您的开发环境中,bundle B 可能是 SNAPSHOT 版本。因此您可以立即观察您的更改(只需确保在您的 karaf 命令行中点击 bundle:watch *)。 Bundle A 也立即检测到 B 的变化。

  • 在您的生产环境中,bundle B 必须是发布版本。因此,要在 B 中部署新更改,您必须安装它的新版本并删除旧版本。

    如果你想让 B 部署两个不同的版本,并强制 A 使用新版本,你必须通过修改导入包对 bundle A 进行一些更改,如下所示:

    ...
    bundle_B_package*;version="[bundle_B_new_version,bundle_B_new_version + 1)",
    ...
    

我们在这里应用语义版本控制:)