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。您需要找到所有依赖项的深度并解决它们。
我得到了迁移项目。目前版本为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。您需要找到所有依赖项的深度并解决它们。