如何为buildSrc与应用模块统一配置Kotlin版本?
多模块Kotlin项目用buildSrc统一管理依赖版本并对齐Kotlin版本
最近折腾多模块Kotlin项目时,刚好碰到了用buildSrc(基于Kotlin DSL)统一管控依赖定义与版本,同时要让buildSrc模块和业务应用模块使用相同Kotlin版本的需求,整理了一套实操方案分享给你:
第一步:基础的buildSrc配置
buildSrc模块的核心是用Kotlin DSL编写配置,它有两种插件声明方式:
- 简洁版(Gradle会自动适配兼容的插件版本):
plugins { `kotlin-dsl` }
- 指定具体版本的完整声明方式:
plugins { id("org.gradle.kotlin.kotlin-dsl") version "0.16.2" }
第二步:对齐buildSrc与业务模块的Kotlin版本
默认情况下,kotlin-dsl插件会绑定一个固定的Kotlin版本,很可能和你业务模块用的版本不一致,所以我们要手动统一:
1. 在buildSrc里定义统一版本常量
在buildSrc/src/main/kotlin下创建一个Versions.kt文件,把所有统一版本都集中在这里:
object Versions { // 这里填你项目要使用的Kotlin版本 const val kotlin = "1.9.20" // 还可以扩展其他依赖版本,比如协程、Compose等 // const val coroutines = "1.7.3" }
2. 配置buildSrc的编译环境
回到buildSrc的build.gradle.kts,强制它使用我们指定的Kotlin版本:
plugins { `kotlin-dsl` } // 可选:和业务模块的JVM目标保持一致 kotlinDslPluginOptions { jvmTarget.set("17") } dependencies { // 对齐Kotlin标准库和Gradle插件版本,覆盖插件默认绑定的版本 implementation(kotlin("stdlib-jdk8", version = Versions.kotlin)) implementation(kotlin("gradle-plugin", version = Versions.kotlin)) } // 配置buildSrc的Kotlin编译参数,和业务模块保持一致 tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions { jvmTarget = "17" apiVersion = "1.9" languageVersion = "1.9" } }
3. 业务模块引用统一版本
在你的应用模块(比如app模块)的build.gradle.kts里,直接用buildSrc里定义好的版本:
plugins { id("com.android.application") kotlin("android") } android { // ... 你的Android基础配置 compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" apiVersion = "1.9" languageVersion = "1.9" } } dependencies { // 直接引用统一的Kotlin版本 implementation(kotlin("stdlib-jdk8", version = Versions.kotlin)) // 其他依赖也可以统一在buildSrc的Dependencies对象里定义,比如: // implementation(Dependencies.coroutinesCore) }
小提示
- 把版本和依赖都放在buildSrc里管理,后续升级版本只需要修改
Versions.kt这一处,整个项目的所有模块都会自动同步,再也不用逐个模块改版本号了。 - 如果遇到版本冲突问题,可以用Gradle的
dependencyInsight任务排查,比如执行./gradlew app:dependencyInsight --dependency org.jetbrains.kotlin:kotlin-stdlib来查看Kotlin标准库的依赖树。
内容的提问来源于stack exchange,提问作者JJD
相关产品推荐
相关产品推荐

