You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:30:02