在一个OSGi实例中部署了多个捆绑软件版本

时间:2014-12-23 15:57:24

标签: cq5 osgi-bundle

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

Core正在进行重大改进,并且需要定义所有三个应用程序对不同版本核心的依赖性,例如

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

是否可以这样做?

1 个答案:

答案 0 :(得分:4)

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

捆绑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>

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

捆绑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,则无需重新编译&amp;重新部署Bundle C。

  • 开放式方括号[即上面的[]告诉捆绑包从提供的第一个版本接受。
  • 结束括号[即)]告诉它接受但不包括提供的第二个版本。

作为旁注,如果您的依赖项正确控制自己的版本控制(即关注semantic versioning ),您应始终能够提供该版本的范围 - 从当前版本开始版本直到下一个主要版本。

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