在同一内容包中嵌入同一 OSGI 依赖项的多个版本

Embedding multiple version of the same OSGI dependency in the same content-package

短版:

如何配置 AEM/CQ5 内容包的 maven POM,以便该包嵌入同一 OSGI 包的不同版本?

长版:

我正在为 AEM (CQ5) 构建内容包。此内容包嵌入了项目所需的直接和间接 osgi 依赖项。

我对其中一个捆绑包(我们称它为 BundleX)有疑问,由于 Google Guava 的特定版本上的未解决的包导入,在内容包部署后它仍然处于未激活状态。 Guava 是我在项目中嵌入的 osgi 依赖项的一部分。问题是不同的bundle依赖不同版本的Guava。

所以我有:

项目内容包:

制作我的内容包时,我想嵌入两个 guava 版本。众所周知,OSGi支持同时部署多个版本的包。

到目前为止,在我的 AEM 内容包 pom 配置中,我有:

<plugin>
    <groupId>com.day.jcr.vault</groupId>
    <artifactId>content-package-maven-plugin</artifactId>
    <configuration>
        <embeddeds combine.children="append">
            <embedded>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <target>${cq.slingUrlSuffix}</target>
            </embedded>
            ...
        </embeddeds>
        ...
    </configuration>
    ...
</plugin>

内嵌依赖的版本由maven决定,当然对于本maven项目来说是唯一的。

所以,综上所述,按问题解决,我应该:

提前,非常感谢您的帮助!

A​​EM 在后台使用的 Apache Sling OSGi 安装程序不支持安装相同(意味着具有相同 Bundle-SymbolicName)捆绑包的多个版本。所以仅仅在一个内容包中添加几个版本的包是没有用的,最高的包版本总是获胜而其他的没有安装。

您可以使用标准 OSGi 工具(例如网络控制台)安装多个版本。

一种解决方法是使用您自己的符号名称重新打包一个包(如 "foo.0.15" 用于 V0.15),以便 Sling 安装程序将多个版本视为不同的包并将它们全部安装。

在这两种情况下,这些包在其 Export-Package 语句中具有正确的版本范围,以避免冲突。