OSGI包依赖问题

时间:2017-04-14 09:04:17

标签: maven osgi cq5 aem

我有迁移项目。目前,版本是CQ5.6。 Maven构建正在成功部署。但是,在构建之后,osgi中的bundle显示处于已安装状态。导致问题的两个依赖项。

org.apache.felix.shell,version=[1.0,2) -- Cannot be resolved

我在构建过程中遇到了如下错误。

错误

[INFO] --- maven-bundle-plugin:2.3.4:bundle (default-bundle) @ myPRJ-taglib ---
[ERROR] Error building bundle com.mypack.deewealth:myPRJ-taglib:bundle:1.0.0-SNAPSHOT : Unresolved references to [org.apache.felix.shell] by class
(es) on the Bundle-Classpath[Jar:dot, Jar:OSGI-INF/lib/recaptcha4j-0.0.8-kohsuke-1.jar, Jar:OSGI-INF/lib/commons-io-2.1.jar, Jar:OSGI-INF/lib/commons-
lang-2.4.jar, Jar:OSGI-INF/lib/crx-packagemgr-1.0.22.jar, Jar:OSGI-INF/lib/squeakysand-osgi-0.4.0.jar, Jar:OSGI-INF/lib/jsoup-1.6.1.jar, Jar:OSGI-INF/
lib/stax-api-1.0-2.jar, Jar:OSGI-INF/lib/org.apache.sling.settings-1.1.0.jar, Jar:OSGI-INF/lib/cq-compat-runmode-0.2.0.jar, Jar:OSGI-INF/lib/commons-c
ollections-3.2.1.jar, Jar:OSGI-INF/lib/squeakysand-jsp-0.4.0.jar, Jar:OSGI-INF/lib/squeakysand-commons-0.4.0.jar]: [org/apache/sling/settings/impl/Run
ModeCommand.class]

为了解决这个问题,我在pom.xml中添加了以下依赖项,正如我们添加的那样 的依赖

<dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.shell</artifactId>
    <version>1.4.2</version>
    <scope>provided</scope>
</dependency>

在import statement。

<Import-Package>
    ....
    ....
   org.apache.felix.shell
 </Import-Package>

之后,构建成功,但由于

,bundle处于已解决状态
org.apache.felix.shell,version=[1.0,2) -- Cannot be resolved

任何建议,为什么会导致问题。

3 个答案:

答案 0 :(得分:2)

我不知道CQ,但我可以解释为什么会发生这种情况。由于缺少依赖性,您在构建期间遇到错误。您通过添加修复构建的依赖项正确地解决了它。幕后发生的事情是您的包更新了它需要的信息(导入)org.apache.felix.shell,version=[1.0,2)包,并且该包将在运行时由其他包提供。

然后在运行时,解析器获取该信息并尝试查找提供(导出)org.apache.felix.shell,version=[1.0,2)包的包。它无法找到一个,所以解决方案失败,你的捆绑包留在installed (我相信你的意思是在你的最后一句中写resolved的内容)状态!

要解决此问题,您需要确保org.apache.felix.shell,version=[1.0,2)包在运行时可用。我不知道CQ以及如何在其中安装捆绑包,但由于您可以安装自己的捆绑包,我假设您也可以以相同的方式安装org.apache.felix.shell捆绑包。

答案 1 :(得分:1)

org.apache.felix.shell,version=[1.0,2) -- Cannot be resolved 意味着你试图在AEM中使用这些felix包。 然而 - AEM中没有OSGi捆绑包可以导出这些包。
您可以从maven repo下载该捆绑包并将其上传到AEM Felix console并使用它。

或者您可以将其创建为父pom依赖项作为模块之一,并与项目jar一起包装并使用它。

AEM Felix

要使用AEM Dependency finder来验证任何包和依赖项的可用性。

AEM Dependency Finder

答案 2 :(得分:0)

您安装的shell jar仍未解析,因为它依赖于某些可能不存在的jar。您需要找到所有依赖项的深度并解决它们。