自定义Gradle Kotlin DSL配置中版本目录插件引用的不一致问题
自定义Gradle Kotlin DSL配置中版本目录插件引用的不一致问题
嘿,我懂你在研究nowinandroid项目时碰到的这个小困惑了——用Kotlin DSL自定义Gradle配置的时候,发现convention模块的build.gradle.kts和根目录的libs.versions.toml之间,插件引用好像有点“不一致”,对吧?
先帮你理清两个文件的核心作用,你就明白为啥会有这种感觉了:
libs.versions.toml是Gradle版本目录功能的核心,说白了就是个“版本统一管理中心”,所有依赖、插件的版本都集中在这写,避免项目里到处硬编码版本号,维护起来省心太多。- convention模块的
build.gradle.kts是项目的“通用配置模板仓库”,把各个业务模块重复的构建配置(比如Android库的编译版本、lint规则)抽出来,做成可复用的约定,让所有模块一键套用。
那为啥会看起来“不一致”?主要是两种场景的插件需求不一样:
- 业务模块用的插件:nowinandroid里所有业务模块(比如app、feature模块)引用的插件,都是通过
alias(libs.plugins.*)的方式,完全遵循libs.versions.toml里的版本定义,这部分是严格统一的,也是项目版本管理的核心。 - convention模块自身用的插件:convention模块本身是个Gradle插件项目,它需要的是用来“开发Gradle插件”的基础插件(比如
kotlin-dsl、java-gradle-plugin),有些是Gradle内置的(不需要指定版本,Gradle自己管),有些是插件开发必备的基础插件,这些在nowinandroid里可能没放到libs.versions.toml里,所以看起来和业务模块的引用方式不一样。
如果你想把这部分也统一起来,其实完全可以这么做:
- 先在
libs.versions.toml的[plugins]块里添加这些插件的版本配置,比如:[plugins] # 业务模块用的插件(本来就有的) android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" } # 新增convention自身需要的插件 kotlin-dsl = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } java-gradle-plugin = { id = "java-gradle-plugin", version.ref = "gradle" } - 然后在convention模块的
build.gradle.kts里把插件引用改成用alias的方式:plugins { alias(libs.plugins.kotlin.dsl) alias(libs.plugins.java.gradle.plugin) }
这样整个项目的插件版本就完全统一在libs.versions.toml里了,不管是业务模块还是插件开发模块,维护起来更顺畅。
备注:内容来源于stack exchange,提问作者Vivek Modi
相关产品推荐
相关产品推荐

