解决Cloud Manager中针对ch.qos.logback和已删除的API的已弃用库使用情况警告

Cloud Manager报告在生成、代码质量或部署步骤期间已弃用ch.qos.logback或其他已删除的API的库使用情况。 这些警告来自过期的ACS AEM Commons版本、不正确的Maven分类器或直接引用已删除API的客户代码。 在某些情况下,Logback引用源自Adobe管理的平台捆绑包,无需客户进行任何更改。 识别确切的源(ACS Commons版本、分类器不匹配、客户代码或Adobe运行时)可确定正确的修复。

描述 description

问题: Cloud Manager在构建或代码质量检查期间标记已弃用的ch.qos.logback或已删除的API用法

说明

Cloud Manager操作中心警报或管道故障指示已弃用ch.qos.logback或其他已删除的API。 这些警告显示在region-deprecated-apiconfiguration-api检查下的生成阶段。 根本原因可能有所不同:过时的ACS AEM Commons版本会以传递方式提取Logback,使用错误的Maven分类器,客户代码引用删除了API,或者Adobe管理的内部捆绑包在运行时注册Logback而不影响构建。

环境:

  • Adobe Experience Manager as a Cloud Service (AEMaaCS)
  • Cloud Manager(构建、代码质量和部署管道)
  • ACS AEM共享资源

问题/症状:

  • Cloud Manager内部版本日志显示: Usage of deprecated package found : ch.qos.logback.* : This internal logback API is not supported by AEM as a Cloud Service
  • 运行时日志包含ServiceEvent REGISTERED [ ch.qos.logback.core.filter.Filter]等条目,即使客户代码不使用Logback也是如此
  • 生成编译失败,并出现与已弃用的API相关的错误,例如RequestResponseFactory
  • 代码分析器报告Service.ranking is not of type Integer等错误或来自groovy-all:2.4.15的警告
  • 升级ACS Commons后出现JSP预编译器失败: File tld:http://sling.apache.org/taglibs/sling/1.0 not found

根本原因:

当Cloud Manager检测到使用了计划删除的API时,会发生已弃用的库警告。 旧版ACS AEM Commons包可传递地包含ch.qos.logback,在AEMaaCS上使用本地ACS Commons分类器也会触发此警告。 引用Cloud Service中已弃用的API的客户代码(例如com.day.cq.contentsync.handler.util.RequestResponseFactory)会生成类似的失败。 来自Adobe管理的平台捆绑包的回滚引用将不会导致部署块,并且不需要客户操作。

如何确认

  1. 查看Cloud Manager内部版本日志中引用ch.qos.logback.*groovy-all:2.4.15com.day.cq.contentsync.handler.util或ACS Commons捆绑包版本的条目。 如果日志不可访问,请通过 Cloud Manager >管道>执行>日志 下载它们。

  2. 通过查找引用Logback的行(如com.adobe.acs:acs-aem-commons-bundle:5.2.0或警告),确认确切的ACS Commons版本。

  3. 运行完整的Maven依赖关系树以检查是否存在冲突的版本:

    code language-none
    mvn dependency:tree -Dincludes=com.adobe.acs:acs-aem-commons*
    
  4. 搜索客户拥有的文件以查找任何直接的Logback引用:

    • Windows:

      code language-none
      findstr /S /N /I "ch.qos.logback" pom.xml *.xml *.yml *.yaml
      

解决方法 resolution

  1. ACS Commons版本或分类器不匹配(最常见):请检查项目的all/pom.xml以了解ACS Commons依赖关系。 确保<classifier>cloud</classifier>存在并且版本至少为6.11.0。 该条目应类似于:

    code language-none
    <groupId>com.adobe.acs</groupId>
    <artifactId>acs-aem-commons-all</artifactId>
    <version>6.16.0</version>
    <classifier>cloud</classifier>
    

如果依赖关系树中出现冲突的版本,请删除对旧版ACS Commons内部版本的任何直接或可传递引用。

​2. 引用已删除的API的客户代码:在代码库中搜索在Cloud Manager日志中标记的已弃用包。 将已删除的API(如RequestResponseFactory)的使用情况替换为Sling生成器API (org.apache.sling.api.request.builder.BuildersSlingUriBuilder)。 重新运行Cloud Manager代码扫描,以确认没有剩余弃用的API警告。
​3. ACS Commons更新后 JSP预编译器失败: 使用scope=provided将Sling JSP Taglib依赖项添加到您的ui.apps模块:


<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.scripting.jsp.taglib</artifactId>
<version>2.4.0</version>
<scope>已提供</scope>


重新运行管道并确认tld not found错误不存在。

​4. 较新版本上的aemanalyzer配置错误:如果版本1.6.16返回错误,例如Service.ranking is not of type Integer,请切换到版本1.6.41.6.14。 重新运行管道,并确认它完成时不会出现分析器错误。
​5. groovy-all:2.4.15标记为已弃用:替换为Orbinson Groovy控制台变体:


<groupId>be.orbinson.aem</groupId>
<artifactId>aem-groovy-console-all</artifactId>
<version>19.0.8</version>
<type>zip</type>
”“

确认代码质量步骤报告无groovy-all警告。 如果Groovy控制台未使用,请将其完全删除。

​6. 仅来自Adobe管理的包的日志回引用:如果代码质量未显示已弃用的库警告,并且日志中仅包含运行时行(例如ServiceEvent REGISTERED [ ch.qos.logback.core.filter.Filter]),在生成步骤中没有警告,则无需执行任何操作。 这些捆绑包源自Adobe平台捆绑包,不会阻止部署。
​7. 验证:开始新的代码扫描或完整管道运行。 确认生成日志在region-deprecated-api下未显示ch.qos.logback条目,并且没有客户代码或ACS Commons的已弃用API警告。

相关阅读

recommendation-more-help
experience-cloud-kcs-help-kbarticles