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

时间:2018-02-03 20:11:46

标签: gradle intellij-idea kotlin

我使用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插件中的错误吗?

11 个答案:

答案 0 :(得分:41)

我认为这对于在Mac上使用Android Studio 3.2的用户可能会有所帮助。

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

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

  

在JVM target 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()
}

答案 1 :(得分:34)

原来,这是我在intellij设置中的kotlin编译器配置。在Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler中,名为Target JVM version的设置应设置为1.8。

答案 2 :(得分:16)

Kotlin插件有一个gradle属性可以使用。添加时

gradle.properties

到您的build.config文件。 当您在android{ compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } }

上进行此配置时
Nagios /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

需要解决的问题。

答案 3 :(得分:8)

请检查您是否设置了以下三个内容:

    build.gradle中的
  1. kotlin选项
    kotlinOptions {
        jvmTarget = '1.8'
    }
  1. 检查相关的“构思”偏好设置 Preferences

  2. 检查项目构面 enter image description here

答案 4 :(得分:2)

这在Kodlin DSL的Gradle中对我有用:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()

答案 5 :(得分:1)

不太确定为什么会这样,但您可以尝试更改Idea本身的设置。由于命令行中的Gradle可以工作,但是从IntelliJ构建时,这可能不是根目录。

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

enter image description here

由于某种原因,其中的配置似乎会覆盖Gradle,因此更改它应该可以正常工作

答案 6 :(得分:1)

这也可以在项目设置的Project Settings > Modules > Kotlin下进行设置。这是我的特定问题……实际上是我尝试的最后一件事。

答案 7 :(得分:1)

///只需将以下代码添加到Build gradle(Module:app)

compileOptions {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
 }

答案 8 :(得分:0)

就我而言,我尝试了所有@alisabzevari选项(包括注释中给出的选项),但没有用,

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

也许会帮助某人。

答案 9 :(得分:0)

设置>构建,执行,部署>编译器> Kotlin编译器,名为Target JVM version的设置应设置为1.8。

答案 10 :(得分:0)

通过编辑build.gradle.kts

解决了
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = "1.8"