(三)Gradle 依赖版本控制

Gradle 支持固定版本、动态版本、版本范围三种常见的依赖版本管理方式,不同方式适用于不同场景,但需注意各自的优缺点。
一、固定版本
引入依赖时明确指定具体的版本号(如 5.3.20),版本迭代时,需手动更新版本(无法自动获取安全补丁或功能更新):
dependencies {// 固定版本:Spring Core 5.3.20(精确匹配)implementation("org.springframework:spring-core:5.3.20")
}
二、动态版本
依赖声明时不指定具体版本,通过通配符(+)或关键字(latest.release、release)自动匹配版本,构建时自动获取最新版本(无需手动更新版本号),适用于开发阶段快速试用最新版本的依赖:
- 通配符
+:匹配指定前缀的最新版本(如5.3.+匹配5.3.x系列最新版) - 关键字:
latest.release(最新正式版)、latest.integration(最新快照版,含未正式发布版本)
dependencies {// 匹配 5.3.x 系列最新版本(如 5.3.21、5.3.22 等)implementation("org.springframework:spring-core:5.3.+")// 匹配 FastJSON 的最新正式版implementation("com.alibaba:fastjson:latest.release")// 匹配 Guava 的最新快照版(含测试版,谨慎使用)implementation("com.google.guava:guava:latest.integration")
}
⚠️注意:动态版本会导致构建结果不确定(不同时间构建可能使用不同版本),严禁在生产环境使用。
三、版本范围
通过区间表达式限定版本上下限,允许版本在一定范围内更新,避免超出预期范围。
常用区间符号:
[x, y]:闭区间(包含 x 和 y,即版本 ≥x 且 ≤y)(x, y):开区间(不包含 x 和 y,即版本 >x 且 <y)[x, y):左闭右开(包含 x,不包含 y,即版本 ≥x 且 <y)(x, y]:左开右闭(不包含 x,包含 y,即版本 >x 且 ≤y)x+:等价于[x, ∞)(≥x 的所有版本)
dependencies {// 版本 ≥5.3.0 且 <5.4.0(允许小版本更新,如 5.3.1、5.3.20)implementation 'org.springframework:spring-core:[5.3.0,5.4.0)'// 版本 >5.3.0 且 ≤5.4.0(排除 5.3.0 本身,允许到 5.4.0)implementation 'com.google.guava:guava:(5.3.0,5.4.0]'// 版本 ≥2.0.0 的所有版本(大版本固定,小版本任意更新)implementation 'org.slf4j:slf4j-api:2.0.0+'
}
四、Rich Versions
除了基础的精确版本或范围声明,Gradle 提供了Rich Version 机制,通过 strictly、require、prefer、reject 四个核心关键字,实现更精细、灵活的版本控制。
4.1 强制版本(strictly)
strictly用于强制指定依赖必须使用某个版本,不允许任何更高或更低的版本。若存在版本冲突(如传递依赖要求其他版本),Gradle 会直接抛错。
例如,强制要求 slf4j-api 必须使用 2.0.7 版本:
dependencies {// 强制要求 slf4j-api 必须使用 2.0.7 版本,不接受其他版本implementation("org.slf4j:slf4j-api") {version {strictly("2.0.7")}because("强制要求 slf4j-api:2.0.7 版本") // 可选,指定版本的原因}implementation("org.springframework.boot:spring-boot-starter-web:3.2.0")
}

strictly 可以缩写为 !! 简化配置:
dependencies {// 强制要求 slf4j-api 必须使用 2.0.7 版本,不接受其他版本implementation("org.slf4j:slf4j-api:2.0.7!!")
}
4.2 限定范围(require)
require 用于限定依赖版本必须在指定范围内(如1.2+、[1.0, 2.0)),例如要求 slf4j-api 版本不低于 5.3.+:
dependencies {// 限制 slf4j-api 版本不低于 5.3.+implementation('org.slf4j:slf4j-api') {version {require("5.3.+")}}
}
等价于默认的直接依赖声明:
dependencies {// 限制 slf4j-api 版本不低于 5.3.+implementation("org.slf4j:slf4j-api:5.3.+")
}
Gradle 会自动选择范围内的合适版本(默认优先最高版本),如果版本超出范围,会被自动调整到范围内的合适版本;若范围内无可用版本,Gradle 会直接抛错。

4.3 推荐版本(prefer)
prefer 表示 “推荐版本”,不强制版本,若存在更高版本依赖,优先选择更高版本。仅在没有 strictly 或 require 约束时生效。
不支持动态版本(如 prefer latest.release 无效);
例如推荐 slf4j-api 使用 2.0.7+ 版本:
// slf4j-api 推荐选择 1.7.25;若有其他依赖要求 1.7.30,则使用 1.7.30
dependencies {implementation("org.slf4j:slf4j-api") {version {prefer("2.0.7")}}implementation("org.springframework.boot:spring-boot-starter-web:3.2.0")
}

4.4 禁止版本(reject)
reject 是独立的版本排除规则,用于明确拒绝某些有问题的版本(如含 bug、不兼容的版本),若依赖解析时选中 reject 的版本,会直接抛出解析失败。
例如禁止使用 slf4j-api 的 2.0.9 版本:
dependencies {constraints {implementation("org.slf4j:slf4j-api"){version {reject("2.0.9")}because("禁止使用 2.0.9 版本")}}implementation("org.springframework.boot:spring-boot-starter-web:3.2.0")
}

