【问题标题】:OSGI bundle dependency issueOSGI 捆绑包依赖问题
【发布时间】:2017-09-10 12:46:55
【问题描述】:

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

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-Package>
    ....
    ....
   org.apache.felix.shell
 </Import-Package>

之后,构建成功,但是由于

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

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

【问题讨论】:

    标签: maven osgi aem


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      然后在运行时解析器获取了该信息并尝试找到提供(导出)org.apache.felix.shell,version=[1.0,2) 包的包。它找不到一个,所以解决方案失败了,你的包被留在了installed(我相信这就是你在最后一句话中写的而不是resolved状态! p>

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2015-10-04
          • 2022-01-23
          • 2015-03-12
          • 2015-12-14
          • 2014-11-20
          • 2018-10-24
          • 2013-11-02
          • 2017-06-05
          • 1970-01-01
          相关资源
          最近更新 更多