Sling Models项目的OSGI依赖问题

时间:2014-07-23 06:42:00

标签: maven osgi cq5 sling aem

我在将适当的maven依赖项合并到我的吊索模型项目时遇到了一些问题。

当我部署我的捆绑包时,我得到以下无法解决的导入:

org.apache.sling.models.annotations,version = [1.1,2) - 无法解析

我相信我已将此包含在以下依赖项中:

<dependency>
    <groupId>org.apache.sling</groupId>
    <artifactId>org.apache.sling.models.api</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.sling</groupId>
    <artifactId>org.apache.sling.models.impl</artifactId>
</dependency>

我尝试使用:

<Embed-Transitive>true</Embed-Transitive>
<Import-Package>*</Import-Package>

在我的捆绑编译说明中,但这导致大量其他依赖关系未得到解决。

当然,我已经走到了这里的花园小径。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

org.apache.sling.models.api V1.0.2捆绑包会导出以下包:

javax.inject,version=0.0.0
org.apache.sling.models.annotations,version=1.1.0
org.apache.sling.models.annotations.injectorspecific,version=1.0.0
org.apache.sling.models.spi,version=1.0.0
org.apache.sling.models.spi.injectorspecific,version=1.0.0

因此,如果该捆绑包在您的Sling实例中处于活动状态,则org.apache.sling.models.annotations,version=[1.1,2)导入应该解析。

请注意,在maven依赖项中添加bundle可能不足以在正在运行的实例中安装它们,重要的是models.api包是否处于活动状态,如/system/console/bundles所示

答案 1 :(得分:1)

使用Embed-Transitive几乎总是一个糟糕的主意。它遍历Maven中的整个传递依赖层次结构,并将每个JAR拉入您自己的JAR中。因此,您将继承所有拖入的垃圾的所有包依赖关系。

当你有一个像你这样需要导入的软件包时 - 在这种情况下org.apache.sling.models.annotations - 最好的解决方案是找到另一个已经可用的软件包导出同一个软件包。