gradle默认采用最新版本策略解决依赖冲突,但可通过force强制指定版本、exclude+explicit declare局部替换、platform/bom统一管理版本;执行./gradlew dependencies可验证结果。

Gradle 会自动解析依赖传递链中的版本冲突,并默认采用“最新版本策略”(即取所有请求版本中最新的那个)。但这个行为不总是符合预期,尤其当新版本存在兼容性问题时。你可以通过多种方式显式强制指定某个具体版本号,覆盖默认解析结果。
使用 force 强制指定依赖版本
这是最直接的方式,在 dependencies 块之外用 configurations.all 或针对特定配置(如 implementation)进行强制声明:
configurations.all {
resolutionStrategy {
force 'org.springframework:spring-core:5.3.31'
force 'com.fasterxml.jackson.core:jackson-databind:2.13.5'
}
}
这样无论哪个依赖间接引入了 spring-core 或 jackson-databind,最终都会统一使用你指定的版本。
用 exclude + explicit declare 精确控制
如果你只想替换某一个上游依赖带进来的旧版本,可以先排除它,再手动声明所需版本:
implementation('org.springframework.boot:spring-boot-starter-web:2.7.18') {
exclude group: 'org.springframework', module: 'spring-core'
}
implementation 'org.springframework:spring-core:5.3.31'
这种方式更精准,适合局部干预,避免全局 force 影响其他模块。
利用 platform 或 bom 统一管理版本(推荐用于多模块项目)
对于 Spring Boot、Spring Cloud 等生态,官方提供 BOM(Bill of Materials),可一次性锁定整套依赖版本:
dependencies {
implementation platform('org.springframework.boot:spring-boot-dependencies:2.7.18')
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
BOM 中已定义各组件的兼容版本,Gradle 会优先采用其中声明的版本,无需逐个 force。
检查实际解析结果并验证
执行以下命令查看最终生效的依赖树,确认目标库是否已被正确替换:
./gradlew dependencies --configuration runtimeClasspath | grep -A5 -B5 'spring-core'
或者用 IDE 的 Gradle 面板展开依赖树,观察对应模块旁是否显示 (forced) 标记。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











