Mac环境Gradle 7.6.1构建失败:Jackson依赖版本冲突
问题分析
你的Gradle构建在:test任务失败,核心原因是Jackson依赖版本约束冲突:
- 项目直接声明了
com.fasterxml.jackson.core:jackson-databind:2.15.0和com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.0 - Apache Beam间接依赖要求Jackson版本为2.14.1
- fortify-bom通过BOM机制强制限定Jackson版本必须为2.13.0
这三个互斥的版本要求导致Gradle无法解析:testRuntimeClasspath配置,最终构建失败。
解决方案
以下是三个可行的解决方向,可根据项目合规要求和兼容性需求选择:
方案1:对齐fortify-bom的强制版本(优先推荐)
直接将项目的Jackson依赖版本调整为2.13.0,与fortify-bom的约束保持一致:
// 修改build.gradle中的Jackson依赖声明 implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.0'
调整后建议验证Apache Beam在Jackson 2.13.0下的功能,Jackson小版本间的API兼容性通常较好,大概率不会出现问题。
方案2:强制指定Jackson版本(需确认合规性)
如果项目必须使用Jackson 2.15.0,可以通过Gradle的版本强制策略覆盖fortify-bom和Apache Beam的约束:
// 在build.gradle中添加版本强制配置 configurations.all { resolutionStrategy { // 强制所有依赖使用指定的Jackson版本 force 'com.fasterxml.jackson.core:jackson-databind:2.15.0' force 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.0' // 同步强制核心模块版本,避免版本不一致 force 'com.fasterxml.jackson.core:jackson-core:2.15.0' force 'com.fasterxml.jackson.core:jackson-annotations:2.15.0' } }
注意:此方案需要确认是否违反项目的合规规定(比如fortify-bom的版本限制是否为硬性要求),同时要全面测试Apache Beam与Jackson 2.15.0的兼容性。
方案3:排除Apache Beam的Jackson依赖
如果Apache Beam对Jackson的依赖并非核心必要,可以排除其自带的Jackson依赖,改用项目指定的版本:
// 以Apache Beam核心依赖为例,添加exclude配置 implementation('org.apache.beam:beam-sdks-java-core:你的版本号') { exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind' exclude group: 'com.fasterxml.jackson.datatype', module: 'jackson-datatype-jsr310' }
调整后务必测试Apache Beam的相关功能,确保排除依赖后不会出现运行时错误。
内容的提问来源于stack exchange,提问作者gcpdev-guy
相关产品推荐
相关产品推荐

