解决在部署期间检测到已弃用的com.google.common (Guava)库使用问题

检测到已弃用的com.google.common (Google Guava) API时,AEM部署失败或触发操作中心警报。 Cloud Manager会检查所有OSGi导入,包括可传递和测试范围依赖项,因此即使项目没有明确依赖于Guava,也会出现警告。 修复取决于源:已过期的ACS AEM Commons、核心组件示例包、测试库或直接引用Guava实用程序的自定义代码。 删除或替换Guava依赖关系,然后重新部署,可清除警报并关闭“操作中心”事件。

描述 description

问题: Cloud Manager在部署期间标记已弃用的com.google.common (Guava)用法

说明

Cloud Manager和AEM API弃用扫描仪标记已弃用com.google.common.*。 即使项目没有明确的Guava依赖关系,也会出现警告,因为Cloud Manager会检查OSGi导入,包括可传递依赖关系和测试范围依赖关系。 该问题影响AEMaaCS、Managed Services和内部部署环境。

环境:

  • Adobe Experience Manager as a Cloud Service (AEMaaCS)
  • AEM Managed Services (AMS)
  • 内部部署的AEM 6.5 LTS
  • Cloud Manager(构建和代码质量管道)

问题/症状:

  • 操作中心警报: Deprecated Library Detected — com.google.common
  • Cloud Manager分析器日志警告引用包,如com.google.common.collect
  • 由于使用了已弃用的库,管道代码质量步骤暂停或失败
  • OSGi检查器确认捆绑包导入com.google.common.*,即使它只是可传递测试依赖关系

根本原因:

com.google.common API已完全弃用,计划在AEM as a Cloud Service中删除。 Cloud Manager将标记导入com.google.common.*的任何捆绑包,而不管依赖项是显式的、可传递的还是测试范围的。 已弃用的用法可能源自过时的ACS AEM Commons版本、核心组件示例包、io.wcm测试库、slf4j-testsling-mock、Asset Share Commons或使用Guava实用程序(如Lists.partition())的自定义代码。 在AEM 6.5 LTS和内部部署中,由于sling_bootstrap.txt限制,Guava不再发货,并且无法作为独立捆绑包安装。

如何确认

  1. 在核心捆绑包模块中运行以下命令,以识别在Guava中拉入的所有依赖项,包括测试范围:

    code language-none
    mvn dependency:tree -Dincludes=com.google.guava:*,com.google.common:*
    
  2. 查看输出以确认源是直接的还是可传递的,并将其与下面的修正路径之一匹配。

  3. 与Cloud Manager分析器日志交叉引用,以确认哪些包导入com.google.common.*

解决方法 resolution

  1. 使用Guava的自定义代码(AEMaaCS、AMS、内部部署):com.google.common实用程序替换为JDK或Apache Commons Collections 4等效项。 例如,将Lists.partition()替换为基于Java流的批处理方法。 通过搜索项目进行验证:

    code language-none
    grep -R "com.google.common" ./src
    

如果短期内删除Guava中断了功能,请临时嵌入您自己的Guava版本(请参阅步骤5)并规划重构。
​2. ACS AEM Commons正在提取Guava (AEMaaCS):请将ACS AEM Commons更新为至少版本6.11.0并确保已根据官方指南设置classifier=cloud。 重建并检查分析器输出,确认不再报告Guava。
​3. 核心组件示例包(AEMaaCS):all模块中删除所有core.wcm.components.examples.*包。 重新运行mvn clean install并检查生成的内容包,以确认示例包不存在。 检查它是否未由父POM继承重新引入。
​4. 测试范围可传递依赖项(AEMaaCS):删除或替换可传递引用Guava的测试库,如slf4j-testio.wcm.testing.aem-mock.*。 重新运行mvn dependency:tree以确认com.google.common不再出现。 如果泄漏仍然存在,请将包插件配置为从Import-Package中排除com.google.common.*
​5. AEM 6.5内部部署或AMS — 在自定义捆绑包中嵌入Guava:如果需要Guava,请将其嵌入自定义捆绑包中或为其添加阴影,而不是将其作为独立捆绑包进行安装(独立安装被sling_bootstrap.txt阻止)。 确保该捆绑包不会导出其Guava包。 部署和确认自定义捆绑包在Web控制台中显示Active状态。
​6. 重新生成并重新部署:运行完整的Cloud Manager管道(AEMaaCS)或通过AMS/内部部署过程部署OSGi捆绑包。 确认代码质量步骤完成,并且不报告已弃用的com.google.common.*警告。
​7. 重新验证:对于AEMaaCS,运行完整的Cloud Manager管道会重新触发创建操作中心事件的同一扫描程序。 如果未检测到已弃用的用法,则事件会自动解析。 刷新操作中心以确认事件已关闭。

验证

  1. 再次运行mvn dependency:tree并确认没有模块导入com.google.common.*
  2. 部署后查看Cloud Manager分析器日志,确认没有保留已弃用的库警告。
  3. 确认操作中心不再生成已弃用的库事件。
  4. 使用OSGi Web控制台或管道日志验证没有自定义捆绑包导入com.google.common.*

相关阅读

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