为什么kotlin gradle插件不能用1.8目标构建?

问题描述 投票:30回答:5

我有使用intellij为kotlin 1.2.10配置的最简单的gradle项目。这是我的build.gradle文件:

buildscript {
    ext.kotlin_version = '1.2.10'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'com.ali'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'kotlin'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

我有一个简单的java界面:

public interface MyMath {
    static int myAbs(int input) {
        return Math.abs(input);
    }
}

当我导入此接口并尝试调用myAbs方法时,它失败并显示以下错误:

Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'

我创建了一个intellij kotlin应用程序,它工作正常。这是新Kotlin gradle插件中的错误吗?

gradle intellij-idea kotlin
5个回答
67
投票

我认为这对那些在Mac上使用Android Studio 3.2的用户有帮助。

要更改Kotlin Compiler Target JVM版本,您应该转到Android Studio - > Preferences - > Kotlin Compiler,然后从下拉列表中选择Target JVM版本。

无论如何,我仍然收到以下错误

JVM目标1.6中禁止在Java接口中调用静态方法。用'-jvm-target 1.8'重新编译

解决了

将以下内容添加到我的build.gradle中解决了以下问题:

android {
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

关于此和其他Gradle配置选项:https://kotlinlang.org/docs/reference/using-gradle.html


使用Kotlin Gradle DSL:

import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions

(kotlinOptions as KotlinJvmOptions).apply {
    jvmTarget = JavaVersion.VERSION_1_8.toString()
}

42
投票

事实证明,这是我在intellij设置中的kotlin编译器配置。在Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler,一个名为Target JVM version的场景应该设置为1.8。


1
投票

不太清楚为什么会这样,但您可以尝试更改Idea本身的设置。由于Gradle来自命令行,但是当从IntelliJ构建时,这可能是根。

转到文件 - >项目结构。转到Project选项卡,确保Project SDK为8(或更新)并将Project language level设置为Java 8

enter image description here

其中的配置似乎由于某种原因覆盖了Gradle,因此更改它应该有效


1
投票

这也是在Project Settings > Modules > Kotlin下的项目设置中设置的。这是我的具体问题......字面意思是我尝试过的最后一件事。


0
投票

在我的情况下,我尝试了所有@alisabzevari选项,包括在评论中给出,但它没有用,

我的错误我在src/<sourcset_name>kotlin/文件夹中也添加了java文件,后来我将java文件转换为kotlin文件。和瞧!有用。

可能它会帮助某人。

© www.soinside.com 2019 - 2024. All rights reserved.