Gradle Java项目如何升级aws-sdk:ssm依赖的commons-codec版本
commons-codec 传递依赖版本升级临时方案
问题说明
安全扫描检测到项目中引入的commons-codec 1.11存在安全漏洞,需升级至1.13版本。该依赖并非项目直接声明引入,而是通过software.amazon.awssdk:ssm -> httpclient -> commons-codec的传递链路引入,即使将aws-sdk升级到当前最新版本,传递拉取的commons-codec依旧是存在漏洞的旧版本。
当前项目使用的Gradle依赖配置如下:
implementation platform('software.amazon.awssdk:bom:2.17.230') implementation 'software.amazon.awssdk:regions' implementation 'software.amazon.awssdk:ssm'
对应依赖链路参考:
可行解决方法
不需要等待aws-sdk官方更新依赖版本,通过Gradle的依赖版本管理机制即可临时覆盖传递依赖的版本,两种常用实现都可以生效:
- 方法一:直接显式声明高版本依赖
Gradle在做依赖版本解析时,会优先选择项目中显式声明的依赖版本,直接在dependencies块中新增1.13版本的commons-codec依赖,即可自动覆盖所有传递链路引入的低版本:// 原有依赖保持不变 implementation platform('software.amazon.awssdk:bom:2.17.230') implementation 'software.amazon.awssdk:regions' implementation 'software.amazon.awssdk:ssm' // 新增显式声明,覆盖传递依赖版本 implementation 'commons-codec:commons-codec:1.13' - 方法二:通过resolutionStrategy强制指定版本
如果不想额外新增依赖声明,可以在配置块中给所有依赖解析规则加强制版本约束,所有配置下传递引入的commons-codec都会被强制替换为指定版本:configurations.all { resolutionStrategy { force 'commons-codec:commons-codec:1.13' } }
验证方法
配置修改完成后,在项目根目录执行./gradlew dependencies(Windows环境执行gradlew.bat dependencies),在输出的依赖树中搜索commons-codec条目,确认最终解析的版本为1.13即配置生效。
补充说明:commons-codec 1.13完全向下兼容1.11版本的API,AWS SDK v2在该版本下运行无兼容问题,可以放心替换。
内容的提问来源于stack exchange,提问作者Srini
相关产品推荐
相关产品推荐

