
本文详解如何解决Android项目中Kotlin编译任务(jvmTarget=17)与Java编译任务(sourceCompatibility=1.7)版本冲突导致的Execution failed for task ':info:compileKotlin'错误。
本文详解如何解决android项目中kotlin编译任务(jvmtarget=17)与java编译任务(sourcecompatibility=1.7)版本冲突导致的`execution failed for task ':info:compilekotlin'`错误。
在Android开发中,尤其是使用Kotlin与Java混编的项目里,Gradle要求Kotlin编译器生成的字节码(通过 kotlinOptions.jvmTarget 指定)必须与Java编译器的目标兼容级别(android.compileOptions.sourceCompatibility 和 targetCompatibility)严格一致。否则会抛出明确错误:
'compileJava' task (current target is 1.7) and 'compileKotlin' task (current target is 17) — jvm target compatibility should be set to the same Java version.
该错误本质是JVM字节码层级不匹配:Java 1.7字节码无法安全加载或调用JVM 17生成的类(反之亦然),而Android Gradle插件(AGP)在构建时强制校验一致性。
✅ 正确解法不是单独修改JDK路径或Gradle插件版本,而是统一声明并自动同步JVM目标版本。推荐在项目根目录的 build.gradle(或 build.gradle.kts)中添加以下配置:
// build.gradle(Groovy语法)
subprojects {
afterEvaluate {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
if (project.plugins.hasPlugin("com.android.application") ||
project.plugins.hasPlugin("com.android.library")) {
kotlinOptions.jvmTarget = android.compileOptions.sourceCompatibility.toString()
} else {
kotlinOptions.jvmTarget = sourceCompatibility.toString()
}
}
}
}⚠️ 注意事项:
立即学习“Java免费学习笔记(深入)”;
- 必须确保
android.compileOptions已正确定义(通常在模块级build.gradle中):android { compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" // 此行可保留,但会被上述逻辑覆盖,建议移除避免冗余 } } - 若使用 Kotlin DSL(
build.gradle.kts),需改写为等效Kotlin语法,并注意类型转换(如toString()); - 不要仅靠IDE的“Project Structure → SDK Location”或“Gradle JDK”设置来修复——这些只影响Gradle进程自身运行环境,不控制编译输出的字节码版本;
- 对于新项目,强烈建议直接采用 Java 17 / Kotlin 1.9+ + AGP 8.0+ 组合,并全局统一为
VERSION_17,以获得最佳兼容性与现代语言特性支持。
? 总结:该问题的核心在于编译目标对齐,而非环境配置。通过 afterEvaluate 动态绑定 kotlinOptions.jvmTarget 到已声明的 sourceCompatibility,可实现跨模块、自适应、零维护的版本同步,彻底规避此类构建失败。


















