You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle项目传递依赖版本冲突与漏洞误报问题咨询

Gradle依赖冲突与扫描器误报问题解答

问题背景

某Gradle项目包含两个直接依赖,二者依赖同一传递依赖的不同版本(未设置冲突失败规则),执行./gradlew app:dependency得到依赖树如下:

+--- io.somelib:somelib-java:2.9.3
|    +--- com.somecommondep:common-dep-java:1.2.0
+--- com.otherlib:otherlib-java:5.8.2
|    +--- com.somecommondep:common-dep-java:1.1.0 -> 1.2.0

其中com.somecommondep:common-dep-java:1.1.0存在CVE-YYY-XXXXX漏洞,扫描器标记应用存在风险。用户提出两点判断:

  1. 运行时实际仅使用1.2.0版本,因为Gradle在此场景下会采用最新的传递依赖版本
  2. 应用实际不存在漏洞,属于扫描器误报

解答

你的两点判断均正确:

  • 运行时版本验证:Gradle默认采用「最新版本获胜」的依赖冲突解决策略,依赖树中的-> 1.2.0明确表明,otherlib-java:5.8.2依赖的1.1.0版本被替换为1.2.0。最终打包到应用中的传递依赖只有1.2.0版本,运行时不会加载1.1.0的代码。
  • 扫描器误报判定:这类情况属于典型的扫描器误报。多数静态依赖扫描工具仅解析依赖声明关系,未识别Gradle实际执行的依赖替换逻辑,只要依赖树中出现过带漏洞的版本引用就标记风险,但该版本并未被引入到最终产物中。

额外验证方式

  • 执行命令 ./gradlew app:dependencyInsight --dependency com.somecommondep:common-dep-java,可查看该依赖的完整选择过程,确认最终生效版本。
  • 检查应用打包后的产物(如jar/war包),其中仅包含common-dep-java-1.2.0.jar,无1.1.0版本的文件。

内容的提问来源于stack exchange,提问作者Hugo Migneron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:23:19