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

Gradle 8搭配Kotlin 1.8编译时JVM目标版本不一致致构建失败

问题成因及解决方案

问题描述

使用Gradle 8 + Kotlin 1.8编译多模块项目时,某模块出现如下错误:

compileDebugJavaWithJavac' task (current target is 1.8) and 'kaptGenerateStubsDebugKotlin' task (current target is 17)
jvm target compatibility should be set to the same Java version.

该模块已在build.gradle中配置统一的JVM目标(1.8),但问题依然存在。

可能成因

  • 根项目全局配置覆盖模块设置:根目录的gradle.properties或根项目build.gradle的allprojects/subprojects块中,可能设置了全局的Kotlin JVM目标为17,优先级高于模块本地配置,导致kapt生成stubs时使用了全局配置。
  • 依赖模块传递JVM目标:该模块依赖的其他本地模块或第三方库,配置了更高的JVM目标(17),kapt在处理注解生成stubs时继承了依赖的JVM版本。
  • Kotlin/Gradle兼容性问题:Gradle 8对Kotlin插件版本要求较高,Kotlin 1.8.x早期版本可能存在配置读取bug,导致kapt未正确识别模块的kotlinOptions设置。
  • Hilt插件影响:Hilt的kapt注解处理器在生成stubs时,可能未同步模块的JVM目标配置,需要单独指定。

解决方案

1. 检查并修正全局配置

  • 打开根目录gradle.properties,查找是否有类似kotlin.jvm.target=17的配置,若存在,要么修改为1.8,要么在模块中显式覆盖。
  • 检查根项目build.gradle的allprojects或subprojects块,若有统一设置kotlinOptions.jvmTarget=17,移除该全局配置,让模块使用本地设置。

2. 显式为kapt指定JVM目标

在模块的build.gradle中添加以下配置,强制kapt使用1.8版本:

// 为kapt生成stubs任务单独设置JVM目标
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs).configureEach {
    kotlinOptions.jvmTarget = "1.8"
}

// 为kapt的javac选项设置版本
kapt {
    javacOptions {
        option("-source", "1.8")
        option("-target", "1.8")
    }
}

3. 检查依赖模块配置

查看该模块依赖的所有本地模块,确认其kotlinOptions.jvmTarget是否为1.8,若有模块使用17,要么将该依赖模块的JVM目标改为1.8,要么将当前模块的JVM目标升级为17(需确保compileSdk、minSdk等兼容)。

4. 升级Kotlin插件版本

Gradle 8建议搭配Kotlin 1.8.20及以上版本,在根项目的版本配置文件(如libs.versions.toml)中,将Kotlin插件版本升级至1.8.20或更高,重新同步项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:12:06