【发布时间】:2014-12-23 15:57:24
【问题描述】:
我在 CQ 中部署了三个应用程序,它们都依赖于一个包(比如“核心”)。
Core 正在进行重大改头换面,需要定义所有三个应用程序对不同版本的 Core 的依赖关系,例如
- A 将依赖核心 1.0
- B 将依赖核心 1.5
- C 将依赖核心 2.0
可以这样做吗?
【问题讨论】:
标签: aem osgi-bundle
我在 CQ 中部署了三个应用程序,它们都依赖于一个包(比如“核心”)。
Core 正在进行重大改头换面,需要定义所有三个应用程序对不同版本的 Core 的依赖关系,例如
可以这样做吗?
【问题讨论】:
标签: aem osgi-bundle
OSGi(CQ 本身嵌入其中)支持同时部署的多个版本的包。您可以部署 3 个版本的“核心”,然后在清单中为导入应用程序请求特定版本:
Import-Package: package.name.of.core;version="1.0"
Import-Package: package.name.of.core;version="1.5"
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>
您可以在清单中提供绑定的版本范围,例如
Import-Package: package.name.of.core;version="[1.0,1.1)"
Import-Package: package.name.of.core;version="[1.5,1.6)"
Import-Package: package.name.of.core;version="[2.0,3.0)"
<dependency>
<groupId>group.of.core</groupId>
<artifactId>core</artifactId>
<version>[2.0.0,3.0.0)</version>
</dependency>
这将允许您继承错误修复,例如,如果部署的版本更改为 2.0.1,您将不需要重新编译和重新部署 Bundle C。
[ ] 告诉捆绑软件从提供的第一个版本开始接受。) ] 告诉它接受但不包括提供的第二个版本。附带说明,如果您的依赖项正确控制自己的版本控制(即遵循semantic versioning),您应该始终能够提供版本范围 - 从当前版本开始到下一个主要版本。
即在您的情况下,应用程序 A 也应该能够使用 1.5 版,因为次要版本不应包含向后兼容性方面的重大更改。
【讨论】: