Skip to content

版本控制限定符

源:丰富版本声明

在 Gradle 中,版本号不仅仅是一个字符串。当你遇到复杂的依赖冲突时,简单的 implementation 已经无法解决问题,你需要使用丰富版本声明 (Rich Versions)

1. 四个核心限定符

限定符含义行为
require默认行为“我需要这个版本,但如果有更高的我也能接受”。
strictly强力镇压“必须是这个版本!如果有任何库依赖了不同版本,构建立即报错”。
prefer软建议“如果没有其他库有特殊要求,请优先使用我这个版本”。
reject黑名单“绝对不要使用这些版本(如已知有 Bug 的版本)”。

2. 实战案例:强制降低版本

场景

你引入了库 A 依赖 okhttp:4.9.0,但你的项目因为某些原因必须使用 3.12.0

kotlin
dependencies {
    implementation("com.squareup.okhttp3:okhttp") {
        version {
            strictly("3.12.0")
        }
    }
}

3. 组合拳:范围选择与拒绝

kotlin
dependencies {
    implementation("com.google.guava:guava") {
        version {
            require("30.0-jre")
            prefer("31.0-jre")
            reject("30.1-jre") // 明确拒绝某个有 Bug 的版本
        }
    }
}

4. 为什么专家不用 force

虽然 configurations.all { resolutionStrategy.force(...) } 也能起作用,但它太暴力且难以局部控制。Rich Versions 允许你针对单个依赖进行精细化控制,是现代 Gradle 的首选。