Gradle版本目录:多TOML文件间共享版本定义的实现方案
如何在Gradle版本目录的独立文件间共享版本定义?
当前实现
TOML文件
// gradle/tools.versions.toml [versions] kotlin = "1.7.10" gradle = "7.2.1" maven = "2.0"
// gradle/libs.versions.toml [versions] kotlin = "1.7.10" [libraries] kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
版本目录配置
versionCatalogs { // 希望能在此定义版本并在TOML文件中使用... // val kotlin = "1.7.10" create("tools") { from(files("gradle/tools.versions.toml")) } create("libs") { from(files("gradle/libs.versions.toml")) } // 其他配置... }
问题需求
希望保留独立文件的前提下,在Gradle版本目录配置中共享版本定义;不考虑buildSrc或复合构建方案,仅使用Gradle版本目录实现,也可接受将TOML文件转为Gradle.kts文件。
解决方案
方案1:TOML文件间通过from引用共享版本
Gradle支持在版本目录的TOML文件中通过from字段引入其他TOML文件的内容,我们可以抽离公共版本到单独文件,再让其他TOML文件引用它:
- 创建公共版本文件
gradle/common.versions.toml:
// gradle/common.versions.toml [versions] kotlin = "1.7.10"
- 修改
tools.versions.toml引入公共版本:
// gradle/tools.versions.toml from = "./common.versions.toml" [versions] gradle = "7.2.1" maven = "2.0"
- 修改
libs.versions.toml引入公共版本:
// gradle/libs.versions.toml from = "./common.versions.toml" [libraries] kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
原有的versionCatalogs配置无需修改,Gradle会自动合并引入的公共版本内容。
方案2:转为Gradle.kts文件实现共享
如果想改用.kts文件定义版本目录,可通过apply引入公共配置:
- 创建公共版本文件
gradle/common.versions.kts:
versionCatalog { version("kotlin", "1.7.10") }
- 修改
tools.versions.kts引入公共配置:
apply(from = "./common.versions.kts") versionCatalog { version("gradle", "7.2.1") version("maven", "2.0") }
- 修改
libs.versions.kts引入公共配置:
apply(from = "./common.versions.kts") versionCatalog { library("kotlin", "org.jetbrains.kotlin", "kotlin-stdlib-jdk8").versionRef("kotlin") }
- 版本目录配置保持不变:
versionCatalogs { create("tools") { from(files("gradle/tools.versions.kts")) } create("libs") { from(files("gradle/libs.versions.kts")) } }
两种方案都能在保留独立文件的同时实现版本共享,且完全基于Gradle版本目录功能,无需依赖其他方案。
内容的提问来源于stack exchange,提问作者prom85
相关产品推荐
相关产品推荐

