简短版:
如何配置AEM / CQ5内容包的maven POM,以便包嵌入相同OSGI包的不同版本?
长版:
我正在为AEM(CQ5)构建内容包。此内容包嵌入了项目所需的直接和间接osgi依赖项。
我遇到了其中一个捆绑包(让他们称之为BundleX)的问题,因为在特定版本的Google Guava上导致未解析的包导入,因此在部署内容包后仍然无法使用该捆绑包。 Guava是我嵌入项目的osgi依赖项的一部分。问题是不同的bundle依赖于不同版本的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>
&#13;
嵌入式依赖项的版本由maven决定,当然对于这个maven项目也是唯一的。
所以,总而言之,要解决问题,我应该:
在osgi容器中嵌入了多个版本的Guava。我看到的唯一解决方案是创建另一个人工内容包pom,以便上传其他Guava依赖项。但由于我希望我的主程序包包含所有嵌入的osgi依赖项,因此它是最佳选择。
将bundle2的依赖版本从r06覆盖到15.0,所以我的容器中只需要Guava 15.0。由于我无法控制此捆绑,我应该从外部覆盖,但我不知道是否可以这样做。
事先,非常感谢你的帮助!
答案 0 :(得分:3)
AEM使用的Apache Sling OSGi安装程序不支持安装相同的多个版本(意味着具有相同的Bundle-SymbolicName
)捆绑包。因此,只需在内容包中添加多个版本的捆绑包即可获得帮助,最高捆绑版本总是会赢,而其他版本则不会安装。
您可以使用标准OSGi工具安装多个版本,例如web控制台。
解决方法是使用您自己的符号名称重新打包捆绑包(例如&#34; foo.0.15&#34;对于V0.15),以便Sling安装程序将多个版本视为不同的捆绑包并将它们全部安装。
在这两种情况下,这些捆绑包在Export-Package
语句中具有正确的版本范围,以避免冲突。