Gradle多模块项目统一管理依赖版本的首选方案是使用libs.versions.toml:在根目录创建该文件集中声明版本别名与依赖坐标,通过settings.gradle.kts启用版本目录,在子模块中以libs.xxx形式引用,修改版本只需更新toml中的[versions]块。

Gradle 多模块项目中统一管理依赖版本,核心是把版本号从各模块的 dependencies 块里抽出来,集中声明、一处修改、全局生效。不靠硬编码或手动改每个 build.gradle,而是用官方支持、类型安全、IDE 友好、天然适配多模块的机制。
首选方案:使用 libs.versions.toml(Gradle 官方推荐)
这是 Gradle 7.0+ 主推的声明式版本目录,稳定、类型安全、补全和跳转支持好,适合新老项目。
- 在项目根目录创建
gradle/libs.versions.toml - 在里面定义版本别名和依赖坐标,例如:
[versions]
springBoot = "3.3.2"
junit = "5.10.2"
retrofit = "2.9.0"
[libraries]
spring-web = { group = "org.springframework.boot", name = "spring-boot-starter-web", version.ref = "springBoot" }
junit-api = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit" }
retrofit-core = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }
[bundles]
test = ["junit-api", "junit-engine"]
- 在
settings.gradle.kts中启用(Gradle 8.0+ 可省略):enableFeaturePreview("VERSION_CATALOGS") - 在任意子模块的
build.gradle.kts中直接引用:implementation(libs.spring.web)testImplementation(libs.bundles.test) - 升级版本只需改 toml 文件里的
[versions],所有模块自动同步
补充方案:复用 Spring Boot 等官方 BOM
适合基于 Spring Boot 的项目,利用其 spring-boot-dependencies BOM 自动对齐生态内版本。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在根项目
build.gradle.kts中应用插件:id("io.spring.dependency-management") version "1.1.4" - 声明 BOM 依赖:
dependencyManagement { imports { mavenBom("org.springframework.boot:spring-boot-dependencies:3.3.2") } } - 子模块中写依赖时可省略版本:
implementation("org.springframework.boot:spring-boot-starter-web") - BOM 能覆盖传递依赖版本,避免冲突,但只适用于 BOM 覆盖范围内的库
慎用方案:避免 buildSrc 或 gradle.properties
这些方式虽能集中写版本,但缺乏类型安全与 IDE 支持,已逐渐被替代。
-
gradle.properties:纯字符串替换,无补全、无校验、易拼错 -
buildSrc:需编译 Java/Kotlin 类,IDE 支持不稳定,Gradle 版本升级可能破坏兼容性 - 全局 ext 变量(如
ext.kotlinVersion = "1.9.20"):Groovy 脚本中可用,但 Kotlin DSL 不原生支持,且无类型提示
多模块结构本身要配合依赖管理
版本统一的前提是模块划分清晰、依赖路径明确。
- 在
settings.gradle.kts中用include显式声明所有子模块 - 跨模块依赖统一用
project(":common")形式,不写具体路径或版本 - 基础模块(如
core、utils)应优先定义api/implementation策略,避免下游意外继承不该暴露的依赖 - 建议将公共依赖逻辑(如 BOM 引入、catalog 启用)放在
allprojects或subprojects块中统一配置

















