版本控制限定符
源:丰富版本声明
在 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 的首选。