Gradle Kotlin DSL迁移报错:Unresolved reference及接收者类型不匹配
解决Kotlin DSL中Plugins块版本引用的报错问题
错误原因
Kotlin DSL不支持Groovy风格的${}字符串插值语法,同时Gradle的plugins块属于预评估块,对变量引用的语法有严格要求,原写法的插值方式会导致类型不匹配,触发接收器类型不兼容的错误。
具体解决方案
移除Groovy插值语法,直接引用版本常量
如果你通过自定义对象(如Versions)管理版本号,直接用常量名即可,无需包裹${}:plugins { kotlin("jvm") version Versions.kotlin // 其他插件配置 }确保Versions对象的可见性与正确性
如果Versions是在buildSrc中定义的版本管理类,需保证它是公开的顶层对象:// buildSrc/src/main/kotlin/Versions.kt object Versions { const val kotlin = "1.9.20" // 替换为你的实际Kotlin版本 }若使用Gradle版本目录(
settings.gradle.kts中配置的versionCatalogs),则通过目录引用版本:plugins { kotlin("jvm") version libs.versions.kotlin.get() }检查plugins块语法规范
Kotlin DSL中plugins块的版本引用使用infix函数语法,必须遵循插件ID version 版本值的格式,不能添加多余的字符串包裹符号。
错误与正确写法对比
错误写法(Groovy风格插值):
plugins { kotlin("jvm") version "${Versions.kotlin}" // 触发类型不匹配错误 }
正确写法:
plugins { kotlin("jvm") version Versions.kotlin }
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

