web-dev-qa-db-ja.com

kotlin gradleプラグインが1.8ターゲットでビルドできないのはなぜですか?

Kotlin 1.2.10のintellijを使用して構成された最も単純な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プラグインのバグですか?

46
alisabzevari

それはintellij設定での私のkotlinコンパイラ構成であることが判明しました。 Settings > Build, Execution, Deployment > Compiler > Kotlin Compilerでは、Target JVM versionという設定が1.8に設定されているはずです。

42
alisabzevari

これは、MacでAndroid St​​udio 3.2を使用している場合に役立つと思います。

Kotlin Compiler Target JVMバージョンを変更するには、Android St​​udio-> 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()
}
72
Jairo Lozano

これは、Project Settings > Modules > Kotlinの下のプロジェクト設定でも設定されます。これは私の特定の問題でした...文字通り、私が最後に試したものです。

1
Tim Keating

これがなぜ機能するのかはよくわかりませんが、Idea自体の設定を変更してみてください。コマンドラインからのGradleは機能しますが、IntelliJからビルドするときは機能しないため、これがおそらくルートです。

[ファイル]-> [プロジェクト構造]に移動します。 [プロジェクト]タブに移動し、Project SDKが8(またはそれ以降)であることを確認し、Project language levelをJava 8に設定します

enter image description here

そこの設定は何らかの理由でGradleをオーバーライドするようですので、それを変更しても動作するはずです

1
Zoe

私の場合、コメントにあるものを含むすべての@alisabzevariオプションを試しましたが、うまくいきませんでした。

私の間違いはJavaファイルをsrc/<sourcset_name>kotlin/フォルダーにも追加し、後でJavaファイルをkotlinファイルに変換しました。そして出来上がり!できます。

それが誰かを助けるかもしれません。

0
dastan

次の3つの要素が考えられているかどうかを確認してください。

  1. build.gradleのkotlinオプション
    kotlinOptions {
        jvmTarget = '1.8'
    }
  1. 関連するアイデア設定を確認してください Preferences

  2. プロジェクトのファセットを確認してください enter image description here

0
Antal Attila