我在CQ中部署了三个应用程序,它们都依赖于一个捆绑(比如“核心”)。
Core正在进行重大改进,并且需要定义所有三个应用程序对不同版本核心的依赖性,例如
是否可以这样做?
答案 0 :(得分:4)
OSGi(CQ本身嵌入其中)支持同时部署的多个版本的软件包。您可以部署3个版本的“核心”,然后在您的Manifest中为导入应用程序请求特定版本:
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>
您可以在Manifest中提供绑定版本范围,例如
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
,则无需重新编译&amp;重新部署Bundle C。
[
]告诉捆绑包从提供的第一个版本接受。)
]告诉它接受但不包括提供的第二个版本。作为旁注,如果您的依赖项正确控制自己的版本控制(即关注semantic versioning ),您应始终能够提供该版本的范围 - 从当前版本开始版本直到下一个主要版本。
即。在您的情况下,应用程序A也应该能够使用1.5版本,因为次要版本不应该包含向后兼容性方面的重大更改。