由于缺少OSGi捆绑包,AEM部署后RDE服务中断

将代码部署到Adobe Experience Manager as a Cloud Service (AEMaaCS) RDE环境会导致服务中断,在此情况下,由于API区域约束更严格,无法解决第三方OSGi捆绑包(如io.jsonwebtoken)。 若要修复此问题,请使用Bundle-ClassPath-conditionalpackage将所需的JAR文件嵌入到项目中,使用aio aem:rde:install重新部署,并验证是否所有依赖项都已成功解析。

描述 description

环境

  • 产品: Adobe Experience Manager as a Cloud Service (AEMaaCS) — 站点
  • 上下文: RDE (快速开发环境)
  • 工具:用于部署的aio aem:rde:install命令

注意:标准云实例和本地部署不受影响。

问题/症状

  • 使用aio aem:rde:install进行部署后,RDE环境变得无响应。

  • 实例显示“服务中断”消息。

  • 重新启动或重置实例并不能解决此问题。

  • 错误日志显示与io.jsonwebtoken相关的未解析的第三方OSGi包依赖关系。

  • 依赖关系在本地和标准云环境中得以解决,但在RDE中由于更严格的API区域约束而失败。

  • 错误日志摘录:

    Unable to resolve fpaec-aem-base-components.core 645: missing requirement fpaec-aem-base-components.core [ 645] osgi.wiring.package; (&(osgi.wiring.package=io.jsonwebtoken)(version>=0.11.0)(!(version>=1.0.0)))

解决方法 resolution

要解决此问题,请执行以下步骤:

  1. 查看RDE强制实施的API区域限制。 这些约束限制了对第三方包(如io.jsonwebtoken)的包可见性和阻止访问。

  2. 将所需的第三方库嵌入到项目中。 使用-conditionalpackageBundle-ClassPath包含以下JAR文件:

    • lib/jjwt-api-0.11.2.jar
    • lib/jjwt-impl-0.11.2.jar
    • lib/jjwt-jackson-0.11.2.jar
  3. 将以下说明添加到您的bnd.bnd文件:

    code language-none
    Bundle-ClassPath: .,
      lib/jjwt-api-0.11.2.jar,
      lib/jjwt-impl-0.11.2.jar,
      lib/jjwt-jackson-0.11.2.jar
    
    code language-none
    -conditionalpackage: \
      io.jsonwebtoken;version="0.11.2", \
      io.jsonwebtoken.security;version="0.11.2"
    
  4. 使用aio aem:rde:install部署更新的包。 确认所有依赖关系均已解决,并且服务不再中断。

  5. 在创作和发布环境中测试部署以确保稳定性。

相关阅读

如何在AEM中使用快速开发环境

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f