构建错误:'kspDebugKotlin' 任务(当前目标为17)

27

任务“:app:kspDebugKotlin”执行失败。无法使用ksp构建

“compileDebugJavaWithJavac”任务(当前目标为1.8)和“kspDebugKotlin”任务(当前目标为17)JVM目标兼容性应设置为相同的Java版本。

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = '1.8'
}
10个回答

19

以及

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

在android {} 同级添加:

kotlin {
    jvmToolchain(8)
}

我不得不在Android Studio Giraffe | 2022.3.1 Canary 7中这样做,以强制ksp继续使用jdk 11 - 我从 https://youtrack.jetbrains.com/issue/KT-55947 找到了这个设置。 - deive
对我来说很有效,谢谢。 - Thân Hoàng
对我来说很有效,谢谢。 - undefined
好的,谢谢! - M.Fakhri

15

我不知道为什么它会引起问题,但我在gradle(project)中添加了这个,然后它就可以工作了。

allprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
}

不适用于我。 - Đốc.tc
1
compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = '17' }请尝试此代码。 - Sohaib Ahmed
谢谢! - J. Soares

14

对于那些仍然遇到问题的人,请尝试将Java和Kotlin版本更新到相同的17,如下所示:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_17
    targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
    jvmTarget = '17'
}

6
allprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions.jvmTarget = "1.8"
    }

    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs).configureEach {
        kotlinOptions.jvmTarget = "1.8"
    }
}

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
2
这个对我有用,KaptGenerateStubs也是必需的。 - Aviran
它对我有用。谢谢。 - Thân Hoàng
对我来说很有效。谢谢。 - undefined

4

KSP版本必须与您的项目的Kotlin版本保持一致。

根据官方文档所述

首先,在顶层build.gradle.kts文件中声明KSP插件。确保选择一个与您的项目的Kotlin版本对齐的KSP版本。您可以在KSP GitHub页面上找到发布版本的列表。

如果您正在使用Kotlin 1.8.0,请确保使用/降级到KPS 1.8.0-1.0.8,因为1.8.0-1.0.9存在已知错误

// match Kotlin version 1.8.0 and use KPS 1.0.8, not 1.0.9
classpath("com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:1.8.0-1.0.8") 

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }

1
固定的,谢谢。奇怪的问题,即使使用17进行合成也没有发生过。 - schwertfisch
1
好的,谢谢。这个问题很奇怪,使用17时甚至都没有发生过。 - undefined

2
为了确保@deive的解决方案有效,您还需要下载JDK 1.8(您可以通过导航到文件->项目结构->Java选项->下载JDK来完成此操作)。如果您没有安装JDK 1.8,则Gradle Kotlin DSL将不断抛出错误。

0
我能够使用Android开发者网站上的Android Studio设置建议“设置JDK版本”来解决这个问题。https://developer.android.com/studio/intro/studio-config#jdk 出于某种原因,我的Gradle JDK选项设置为18。在选择Embedded JDK选项后,我能够构建项目。希望这对某人有所帮助。
从上面的链接中:
最新的OpenJDK副本已捆绑在当前版本的Android Studio中,这是我们建议您在Android项目中使用的JDK版本。要使用捆绑的JDK,请执行以下操作:
1. 在Android Studio中打开您的项目,并选择文件>设置(在macOS上,选择Android Studio>首选项)。 2. 在左侧窗格中,导航到构建、执行、部署>构建工具>Gradle。 3. 在Gradle JDK下,选择Embedded JDK选项。 4. 点击确定。

0

我使用过,它有效

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(8))
    }
}

kotlin {
    jvmToolchain(8)
}

0
解决方案对我有效的方法是:
在项目级别的build.gradle文件末尾添加以下内容:
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
            } else {
                kotlinOptions.jvmTarget = sourceCompatibility
            }
        }
    }
}

这个错误是在应用Android Studio Flamingo补丁2之后出现的。但是上述解决方法对我有效。

0

如果您在使用 kapt 而不是 ksp 时遇到类似的问题,请在 android{} 块之后将此内容复制到您的 gradle kts 文件中

tasks.withType(type = KaptGenerateStubsTask::class) {
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接