【问题标题】:Multiple bundle versions deployed in one OSGi instance多个捆绑版本部署在一个 OSGi 实例中
【发布时间】:2014-12-23 15:57:24
【问题描述】:

我在 CQ 中部署了三个应用程序,它们都依赖于一个包(比如“核心”)。

Core 正在进行重大改头换面,需要定义所有三个应用程序对不同版本的 Core 的依赖关系,例如

  • A 将依赖核心 1.0
  • B 将依赖核心 1.5
  • C 将依赖核心 2.0

可以这样做吗?

【问题讨论】:

    标签: aem osgi-bundle


    【解决方案1】:

    OSGi(CQ 本身嵌入其中)支持同时部署的多个版本的包。您可以部署 3 个版本的“核心”,然后在清单中为导入应用程序请求特定版本:

    捆绑 A

    Import-Package: package.name.of.core;version="1.0"
    

    捆绑 B

    Import-Package: package.name.of.core;version="1.5"
    

    捆绑 C

    Import-Package: package.name.of.core;version="2.0"
    

    如果你使用的是 Maven Bundle 插件,你可以通过你的包的 POM 来生成正确的 Manifest 头文件:

    <dependency>
        <groupId>group.of.core</groupId>
        <artifactId>core</artifactId>
        <version>2.0.0</version>
    </dependency>
    

    您可以在清单中提供绑定的版本范围,例如

    捆绑 A

    Import-Package: package.name.of.core;version="[1.0,1.1)"
    

    捆绑 B

    Import-Package: package.name.of.core;version="[1.5,1.6)"
    

    捆绑 C

    Import-Package: package.name.of.core;version="[2.0,3.0)"
    

    捆绑包 C(通过 POM)

    <dependency>
        <groupId>group.of.core</groupId>
        <artifactId>core</artifactId>
        <version>[2.0.0,3.0.0)</version>
    </dependency>
    

    这将允许您继承错误修复,例如,如果部署的版本更改为 2.0.1,您将不需要重新编译和重新部署 Bundle C。

    • 方括号 [i.e.上面的[ ] 告诉捆绑软件从提供的第一个版本开始接受。
    • 右括号 [即) ] 告诉它接受但不包括提供的第二个版本。

    附带说明,如果您的依赖项正确控制自己的版本控制(即遵循semantic versioning),您应该始终能够提供版本范围 - 从当前版本开始到下一个主要版本。

    即在您的情况下,应用程序 A 也应该能够使用 1.5 版,因为次要版本不应包含向后兼容性方面的重大更改。

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 2020-07-29
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多