Aem 在一个OSGi实例中部署多个捆绑包版本

Aem 在一个OSGi实例中部署多个捆绑包版本,aem,osgi-bundle,Aem,Osgi Bundle,我在CQ中部署了三个应用程序,它们都依赖于一个包,比如“核心” Core正在经历一次重大的改头换面,需要定义所有三个应用程序对不同版本Core的依赖性,例如 A将依赖于核心1.0 B将依赖于核心1.5 C将依赖于Core2.0 有可能做到这一点吗?嵌入CQ的OSGi支持同时部署多个版本的软件包。您可以部署3个版本的“core”,然后在清单中为导入应用程序请求特定版本: 捆绑 束B 束C 如果您使用的是Maven Bundle插件,您可以通过Bundle的POM执行相同的操作,以生成正确的清单头:

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

Core正在经历一次重大的改头换面,需要定义所有三个应用程序对不同版本Core的依赖性,例如

A将依赖于核心1.0 B将依赖于核心1.5 C将依赖于Core2.0
有可能做到这一点吗?

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

捆绑 束B 束C 如果您使用的是Maven Bundle插件,您可以通过Bundle的POM执行相同的操作,以生成正确的清单头:

<dependency>
    <groupId>group.of.core</groupId>
    <artifactId>core</artifactId>
    <version>2.0.0</version>
</dependency>
束B 束C 束C经POM 例如,这将允许您继承错误修复—如果部署的版本更改为2.0.1,您将不需要重新编译和重新部署捆绑包C

上面的开放方括号[e.e.[]告诉bundle接受提供的第一个版本。 结束括号[即]表示接受但不包括提供的第二个版本。 作为旁注,如果您的依赖项正确地控制了它们自己的版本控制(即以下版本),那么您应该始终能够为版本提供一个范围—从当前版本到下一个主要版本

也就是说,在您的情况下,应用程序A也应该能够使用1.5版,因为小版本不应该包含向后兼容性方面的突破性更改

Import-Package: package.name.of.core;version="1.5"
Import-Package: package.name.of.core;version="2.0"
<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>