OSGI 包依赖问题

OSGI bundle dependency issue

我得到了迁移项目。目前版本为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处于resolved状态
org.apache.felix.shell,version=[1.0,2) -- Cannot be resolved

任何建议,为什么这是导致问题的原因。

我不知道 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 捆绑包。

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

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

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

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