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

升级Kotlin 1.7.0后Gradle报sourceCompatibility未解析引用解决方法

问题原因

这个报错是Kotlin 1.7.0的编译任务逻辑调整导致的:sourceCompatibility、targetCompatibility本身就是Java编译任务的专属配置,旧版本Kotlin Gradle插件额外给compileKotlin任务做了这两个属性的透传代理,1.7版本正式移除了这个非标准的代理逻辑,所以写在compileKotlin块里就会报未解析引用。

正确配置方案

任选一种配置方式即可,核心原则是Java编译目标版本和Kotlin编译jvmTarget版本必须完全一致,才能从根源避免JVM版本不匹配导致的字节码内联报错。

方案1:兼容旧版Gradle的通用配置

把Java版本配置移到Java专属编译任务下,Kotlin编译任务只保留自身的jvmTarget配置:

// 配置Java编译版本
tasks.withType<JavaCompile> {
    sourceCompatibility = JavaVersion.VERSION_11.toString()
    targetCompatibility = JavaVersion.VERSION_11.toString()
}

// 配置Kotlin编译版本
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions {
        jvmTarget = "11"
    }
}

方案2:Kotlin 1.7+ 推荐简化配置(最优解)

直接用JVM工具链做统一配置,不需要分别给Java、Kotlin任务单独写版本参数,插件会自动对齐两边的编译目标,还会自动匹配本地对应版本的JDK,避免手动配置漏改导致的版本不一致问题:

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

kotlin {
    jvmToolchain(11)
}
补充说明
  • 如果你开发的是Android项目,不需要单独写上面的全局任务配置,只需要在android配置块的compileOptions里指定Java版本为11,再在同块的kotlinOptions里把jvmTarget设为"11"对齐即可。
  • 所有场景下都不要再把sourceCompatibility、targetCompatibility写到compileKotlin任务块里,1.7及以上版本的Kotlin编译任务已经不再支持这两个属性。

内容的提问来源于stack exchange,提问作者PHPirate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:39:09