webentwicklung-frage-antwort-db.com.de

Warum kann das Kotlin-Gradle-Plugin nicht mit einem Ziel von 1.8 erstellt werden?

Ich habe das einfachste Gradle-Projekt, das mit intellij für Kotlin 1.2.10 konfiguriert wurde. Hier ist meine build.gradle-Datei:

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"
}

Und ich habe eine einfache Java-Schnittstelle:

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

Wenn ich diese Schnittstelle importiere und versuche, die myAbs-Methode aufzurufen, schlägt dies mit diesem Fehler fehl:

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

Ich habe eine Intellij Kotlin-App erstellt, die richtig funktioniert hat. Ist es ein Fehler im neuen Kotlin Gradle Plugin?

17
alisabzevari

Es stellte sich heraus, dass dies meine Kotlin-Compiler-Konfiguration in den Intellij-Einstellungen war. In Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler sollte eine Einstellung namens Target JVM version auf 1.8 gesetzt sein.

28
alisabzevari

Ich denke, dass dies für diejenigen hilfreich sein kann, die Android Studio 3.2 auf dem Mac verwenden.

Um die Ziel-JVM-Version von Kotlin Compiler zu ändern, gehen Sie zu Android Studio -> Voreinstellungen -> Kotlin-Compiler. Ändern Sie dann die Ziel-JVM-Version, indem Sie aus der Dropdown-Liste auswählen.

Trotzdem bekomme ich immer noch die folgende Fehlermeldung

Aufrufe von statischen Methoden in Java-Schnittstellen sind in JVM-Ziel 1.6 nicht zulässig. Rekompilieren mit '-jvm-target 1.8'

GELÖST

Das Hinzufügen des folgenden zu meinem build.gradle hat das Problem gelöst:

Android {
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

Über diese und andere Gradle-Konfigurationsoptionen: https://kotlinlang.org/docs/reference/using-gradle.html

26
Jairo Lozano

Dies wird auch in den Projekteinstellungen unter Project Settings > Modules > Kotlin festgelegt. Dies war mein spezifisches Problem ... buchstäblich das letzte, was ich versuchte.

1
Tim Keating

Nicht ganz sicher, warum das funktioniert, aber Sie könnten die Einstellung in der Idee selbst ändern. Da Gradle von der Kommandozeile aus funktioniert, aber nicht beim Erstellen von IntelliJ, ist dies wahrscheinlich die Wurzel.

Gehen Sie zu Datei -> Projektstruktur. Gehen Sie zur Registerkarte Projekt, stellen Sie sicher, dass Project SDK 8 (oder neuer) ist, und setzen Sie den Project language level auf Java 8

 enter image description here

Die Config dort scheint Gradle aus irgendeinem Grund zu überschreiben, also sollte es funktionieren, es zu ändern

1
Zoe

In meinem Fall habe ich alle @alisabzevari-Optionen ausprobiert, aber es hat nicht funktioniert. 

mein Fehler war, dass ich die Java-Datei auch im Ordner src/<sourcset_name>kotlin/ hinzugefügt habe. Später konvertierte ich die Java-Datei in die Kotlin-Datei. und Voila! Es klappt. 

Vielleicht hilft es jemandem. 

0
dastan

Bitte überprüfen Sie, ob Sie die folgenden drei Ideen haben:

  1. kotlin-Optionen in build.gradle
    kotlinOptions {
        jvmTarget = '1.8'
    }
  1. Überprüfen Sie die relevanten Ideeneinstellungen Preferences

  2. Überprüfen Sie das Projekt Facets enter image description here

0
Antal Attila