Mit JVM-Ziel 1.8 erstellter Bytecode kann nicht in Bytecode integriert werden, der mit JVM-Ziel 1.6 erstellt wird


484

Beim Versuch, die Beispiel-CorDapp auszuführen ( https://github.com/corda/cordapp-example ) über IntelliJ , wird folgende Fehlermeldung :

Mit JVM-Ziel 1.8 erstellter Bytecode kann nicht in Bytecode integriert werden, der mit JVM-Ziel 1.6 erstellt wird

Wie kann ich die IntelliJ-Einstellungen so ändern, dass der gesamte Bytecode mit demselben JVM-Ziel erstellt wird?


5
Ich konnte dieses Problem beheben, indem ich diese Bibliothek zu build.gradleAbhängigkeiten hinzufügte {compile ("org.jetbrains.kotlin: kotlin-stdlib-jdk8")}
Munish Chandel

1
@ MunishChandel Das reicht nicht aus. Wir müssen auch tun, was die Antwort unten nahelegt ...
IgorGanapolsky

Antworten:


1031

app / build.gradle

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }
}

GL

Verwenden Sie Java 8-Sprachfunktionen


31
Dies sollte die überprüfte Lösung sein.
Phil

9
Ab diesem Datum und Android Studio v3.5 ist dies die einzige Lösung, die funktioniert hat, nachdem Sie den Rest ausprobiert haben. Seltsamerweise hat das Festlegen des gleichen Werts unter Einstellungen> Kotlin Compiler keine Auswirkung.
user3399299

53
Nur das kotlinOptions { jvmTarget = "1.8" }sollte ausreichen.
Peter

2
gearbeitet, und die Antwort ist selbsterklärend und prägnant geschrieben
Vikas Pandey

4
Dann sollte "Cache ungültig machen und neu starten"
B-GangsteR

214

Sie können dieses Problem wie folgt beheben:

  • Öffnen Sie die IntelliJ-Einstellungen
  • Zur Build, Execution, Deployment> Compiler> Kotlin Compiler ABER Other Settings > Kotlin compilerwenn Android Studio>3.4
  • Ändern Sie das Target JVM versionin1.8
  • Klicken Apply

6
Ich habe diese Einstellung bereits auf 1,8 festgelegt, sehe diesen Fehler jedoch immer noch, wenn ich durch Haltepunkte gehe. Ich sehe dies hauptsächlich bei Tresorabfragen. Weitere Vorschläge? Es scheint, dass dieses Ziel-JVM-Bit es nicht vollständig behebt.
Arsalan Khalid

38
Auf Ihrer Projektstruktur , stellen Sie sicher , dass Sie auch die Änderung Target platformzu 1.8 JVM auf Ihrem KotlinFacet unter dem GeneralRegisterkarte.
Anyul Rivas

7
Dieser Fehler kann auftreten, wenn eine ungelöste Abhängigkeit besteht !
Programme

5
Für mich wurden die Kotlin CompilerEinstellungen tatsächlich in Other SettingsAbschnitt platziert .
QWERTYFINGER

10
Wenn ein Neustart nach dem Anwenden nicht ausreicht → Caches neu starten und ungültig machen.
Bartek Lipinski

104

Sie sollten in build.gradle Folgendes konfigurieren

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

14
Oder alternativ in der Gradle Kotlin DSL:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
Breandan

Irgendeine Idee, wie man das mit dem kotlin-androidPlugin zum Laufen bringt?
ZeroDivide

Funktioniert ohne großen Aufwand. Ich würde es empfehlen
Mitch

Ich hatte dies in build.gradle, aber irgendwie hat IDEA diese Einstellung überschrieben. Die Antwort von Saeed hat für mich funktioniert.
Nils Petersohn

Fügen Sie dies im Android {} -Abschnitt von Gradle auf App-Ebene hinzu.
Parag Kadam

80

In meinem Fall hat es nicht geholfen, nur die Ziel-JVM-Version wie folgt zu ändern: Datei> Einstellungen> Kotlin-Compiler> Ziel-JVM-Version> 1.8. Der Fehler bei der Kompilierungszeit wurde jedoch behoben. Aber zur Laufzeit fehlgeschlagen.

Ich musste auch Folgendes in die App build.gradle-Datei einfügen, damit es funktioniert.

 android {
     // Other code here...
     kotlinOptions {
        jvmTarget = "1.8"
     }
 }

2
wirkt ein Zauber. danke
dave o grady

funktioniert! danke
Waldmann

55

Wenn die anderen Lösungen für Sie nicht funktionierten (Ändern der JVM-Version in den Compiler-Einstellungen und Hinzufügen jvmTargetzu Ihren build.gradle), .imlkönnen Sie die Zielplattform in den Projekteinstellungen ändern , da Ihre Dateien versuchen, ihre Konfigurationen zu erzwingen.

  • Öffnen File > Project Structure
  • Gehe nach FacetsuntenProject Settings
    • Wenn es leer ist, klicken Sie auf die kleine +Schaltfläche
  • Klicken Sie auf Ihr Kotlin-Modul / Ihre Kotlin-Module
  • Ändern Sie das Target Platformin JVM 1.8(es ist auch besser, die Use project settingsOption zu aktivieren )

3
Ich kann diesen oder den Abschnitt "Facetten" in Android Studio nicht finden ... 🤔 Ich musste die app.iml manuell bearbeiten. Ich machte mich <configuration version="3" platform="JVM 1.8" useProjectSettings="false">an trueund es funktionierte. Die Datei ändert sich jedoch immer wieder!
Aphex

1
@Aphex Es ist eigentlich unter "Datei"> "Projektstruktur", dann unter "Projekteinstellungen"> "Facetten", ich hatte nichts dort, also klickte ich auf "+"> "Kotlin"> Mein Projekt auswählen. Das hat es für mich getan :)
Nicolas Guillaume

Dies funktioniert für mich, wird jedoch jedes Mal, wenn ich meine Datei build.gradle.kts hinzufüge, auf 1.6 zurückgesetzt.
Lou Morda

Gibt es eine Möglichkeit, dies zu konfigurieren und aus der Gradle-Datei zu übernehmen? IMHO ist diese Fehlkonfiguration ein Fehler in Intellij.
Jilles van Gurp

35

In meinem Fall hat dieser Code nicht funktioniert, bis ich apply plugin: 'kotlin-android'von unten nach oben gegangen bin .

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

kotlinOptions {jvmTarget = "1.8"} Didi der Trick für mich, danke
Didi

32

In Android Studio 4.3.2 funktioniert das Hinzufügen über das folgende Verfahren nicht.

  1. Öffnen Sie die IntelliJ-Einstellungen
  2. Gehen Sie zu Erstellen, Ausführen, Bereitstellen > Compiler > Kotlin-Compiler ABER Andere Einstellungen> Kotlin-Compiler, wenn Android Studio> 3.4
  3. Ändern Sie die Ziel-JVM-Version in 1.8
  4. Klicken Sie auf Übernehmen

Der Grund dafür ist, dass Android Studio den folgenden Code nicht in die Gradle-Datei auf Modulebene einfügen kann. Bitte fügen Sie es manuell hinzu.

kotlinOptions {
    jvmTarget = "1.8"
}

Suchen Sie nur für das Addon die Target JVM-Version in der Android Studio-Suche. Sie gelangen direkt zur Option. Geben Sie hier die Bildbeschreibung ein


Nur durch manuelles Hinzufügen hat es bei mir funktioniert. Aus irgendeinem Grund ist Android Studio wirklich fehlerhaft und berücksichtigt keine vorgenommenen Änderungen, es sei denn, wir starten die Idee neu, indem wir den gesamten Cache löschen.
Karan Sharma


26

Feb 2020
android 3.4+
Gehen Sie zu Datei -> Einstellungen -> Kotlin Compiler -> Ziel-JVM-Version> auf 1.8 und stellen Sie dann sicher, dass Sie Datei -> Projekt mit Gradle-Dateien synchronisieren

oder fügen Sie dies in build.gradle (Modul: App) ein. im Android- Block:

kotlinOptions {
           jvmTarget = "1.8"
         }

Nur "Projekt mit Gradle-Dateien
synchronisieren

bestätigte, dass Sie Datei -> Projekt mit Gradle-Dateien
synchronisieren müssen


19

Wenn Sie viele Quellensätze / Module haben, kann es umständlich sein, das jvmTarget für jedes von ihnen separat zu konfigurieren.

Sie können das jvmTarget für alle gleichzeitig wie folgt konfigurieren:

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

Dieses Snippet kann auf der obersten Ebene Ihrer gradle.build-Datei verwendet werden

Nach dem Ändern der Gradle-Datei Reimport All Gradle Imports. Um zu überprüfen, ob es funktioniert hat, öffnen Sie Project Structureund überprüfen Sie, ob IntelliJ JVM 1.8allen Kotlin-Modulen korrekt zugewiesen wurde . Es sollte so aussehen:

Projektstruktur

Ich würde nicht empfehlen, die Plattform direkt in IntelliJ zu ändern, da jeder andere, der Ihr Projekt zum ersten Mal klont, wahrscheinlich mit demselben Problem konfrontiert ist. Die korrekte Konfiguration in Gradle hat den Vorteil, dass sich IntelliJ von Anfang an korrekt für sie verhält.


16

In meinem Fall habe ich dies durch Befolgen dieser beiden Schritte gelöst

1. Go to android studio preferences -> other settings -> kotlin compiler -> set Target JVM version = 1.8 
   if it doesn't work then go to the second option.

2. In your module-level build.gradle file add 
   compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }

Hey, danke für die Antwort, ich musste den 2. Schritt machen und es funktioniert. Können Sie erklären, warum es benötigt wird?
hushed_voice

Sie können mehr Details zu dieser geschlossenen Ausgabe finden. Es ist gut zu wissen, [ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma

Dieser Link ist tot
hushed_voice

12

Für mich war der Grund, dass diese Konfiguration in meinem Build-Gradle in einigen Modulen enthalten war und in einigen nicht

android {  
...      
kotlinOptions {
        val options = this as KotlinJvmOptions
        options.jvmTarget = "1.8"
    }
...
android {

1
Danke, dies war die einzige Lösung, die für mich funktioniert hat. Ich benutze kts buiild Dateien.
Krames

Danke, das sind auch die Lösungen, die für mich funktioniert haben. Und viel deklarativ auf diese Weise. stackoverflow.com/a/57041765/3763032 kevin gab dies auch an, da der smartcast in kotlin gradle files .kts direkt verfügbar ist
mochadwi

12

Fügen Sie für Gradle mit Kotlin-Sprache ( *.gradle.ktsDateien) Folgendes hinzu:

android {
    [...]
    kotlinOptions {
        this as KotlinJvmOptions
        jvmTarget = "1.8"
    }
}

Warum müssen wir Guss thiszu KotlinJvmOptions. Ist der thisEmpfänger nicht schon im kotlinOptionsBlock KotlinJvmOptions? Trotzdem funktioniert es nicht für mich ohne die Besetzung
11m0

1
@ 11m0, ich denke, es hängt mit diesem Problem zusammen: github.com/gradle/kotlin-dsl-samples/issues/1368
HDW

Wenn KotlinJvmOptions nicht gefunden wird, verwenden Sie den vollständigen Namen "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions".
HDW

4

In den meisten Fällen reicht dies aus:

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

Wenn Sie benutzerdefinierte Gradle-Aufgaben wie integrationTestz. B. deklariert haben , fügen Sie auch eine Konfiguration hinzu für compile<YourTaskName>Kotlin:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

Dies würde auch funktionieren, indem zur Gradle-Datei hinzugefügt wird -> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1.8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel

Interessanterweise funktionierte nur Ihre Lösung mit meinem Nicht-Android-Modul! Vielen Dank!
Mohammad Omidvar

4

Die Einstellung sourceCompatibility = JavaVersion.VERSION_1_8aktiviert das Desugaring, kann jedoch derzeit nicht alle vom Kotlin-Compiler verwendeten Java 8-Funktionen desugarieren.

Geben Sie hier die Bildbeschreibung ein

Fix - Die Einstellung kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8im App-Modul Gradle würde das Problem beheben.

Verwenden Sie Java 8-Sprachfunktionen: https://developer.android.com/studio/write/java8-support

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

3

Alle Antworten hier verwenden gradle, aber wenn jemand wie ich hier landet und eine Antwort für maven benötigt:

    <build>
        <sourceDirectory>src/main/kotlin</sourceDirectory>
        <testSourceDirectory>src/test/kotlin</testSourceDirectory>

        <plugins>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>${kotlin.version}</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jvmTarget>11</jvmTarget>
                </configuration>
            </plugin>
        </plugins>
    </build>

Die Änderung vom Jetbrains-Archetyp für kotlin-jvm ist die <configuration></configuration>Angabe des jvmTarget. In meinem Fall 11


3

Nichts hat bei mir funktioniert, bis ich meine Kotlin-Plugin-Abhängigkeit aktualisiert habe.
Versuchen Sie
Folgendes : 1. Ungültig machen und neu starten.
2. Projekt synchronisieren (zumindest versuchen)
3. Gehen Sie zu Datei -> Projektstruktur -> Vorschläge.
4. Wenn es ein Update zu Kotlin gibt, aktualisieren Sie es.
Hoffe es wird jemandem helfen.


die einfachste Lösung
u84six

2

Wenn Sie Visual Studio Code ** mit der Kotlin-Erweiterung verwenden, gehen Sie zur Plugin-Verwaltung Strg + Umschalt + x, geben Sie kotlin ein und klicken Sie auf Verwalten (das kleine Zahnrad) >> Erweiterungseinstellungen konfigurieren

auf Kotlin >> Compiler >> Jvm: Ziel - Geben Sie die Java-Version ein. In meiner Situation habe ich gerade 1.8 eingegeben

Und dann neu starten :-)

** vscode oder einfach 'code' für linux


2

In meinem Fall Datei> Einstellung> Kotlin-Compiler> Ziel-JVM-Version> 1.8


2

Ich benutze Kotlin und Gradle für die normale JVM-Entwicklung (nicht für Android) und dies funktionierte für mich in build.gradle:

allprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
    }
}

1

Wenn Sie Eclipse verwenden, vorausgesetzt, Sie haben das Kotlin-Plugin heruntergeladen:

Klicken Sie mit der rechten Maustaste auf Projekt -> Eigenschaften -> Kotlin Compiler -> Projektspezifische Einstellungen aktivieren -> JVM-Zielversion "1.8"


1

Bei neueren Versionen von Android Studio funktionierte das Ändern nur der Kotlin Target VM-Version nicht.

Datei ➞ Projektstruktur ➞ Module ( app): Setzen Sie sowohl " Quellkompatibilität " als auch "Zielkompatibilität" auf "1.8 (Java 8)". Drücken Sie "OK" und synchronisieren Sie das Projekt mit Gradle.


1

Wenn Sie in Android-Projekt sind

im build.gradle deiner App unter android {}

android{
//other configs...
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

1

Mit dem Kotlin Gradle DSL löste dies das Problem für mich. Ich habe dies zu build.gradle.kts hinzugefügt. Dies ist zusätzlich zu der Antwort von Joel

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()

1
Können Sie uns bitte mitteilen, wo genau Sie dies in der Datei abgelegt haben? Und welche Version des Android Plugins und Gradle verwenden Sie?
BäumeAreEverywhere

Dies ist kein Android-Projekt. Ich verwende Gradle 6.4.
Briantical vor

0

Ein weiterer Hinweis für Eclipse-Benutzer. Nachdem ich die von anderen Benutzern angegebenen JVM-Zieleinstellungen noch einmal überprüft hatte, hatte ich immer noch das gleiche Problem, das durch das Fehlen der Kotlin Runtime Library verursacht wurde. Wenn Sie beispielsweise ein Projekt mit Spring Initializr erstellen, wird es nicht automatisch hinzugefügt. Zum Hinzufügen: right click on your project -> Build path -> Add libraries... -> User Libraryund einfach hinzufügenorg.jetbrains.kotlin.core.KOTLIN_CONTAINER

Stellen Sie sicher, dass Sie Ihr Gradle-Projekt anschließend aktualisieren ( right click -> Gradle -> Refresh gradle project)


0

Wenn Sie diese Meldung in einem Spring Boot / Kotlin-Projekt sehen, setzen Sie einfach die Eigenschaft "kotlin.compiler.jvmTarget" in Ihrer pom.xml auf "1.8".

    <properties>
        <kotlin.version>1.3.70</kotlin.version>
        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
    </properties>
    ...

0

In meinem Fall wurde jvmTarget bereits build.gradlewie folgt in der Datei festgelegt.

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

Aber mein Problem war immer noch da. Schließlich wird es nach dem Ändern der Ziel-JVM-Version von 1.6 auf 1.8 unter Einstellungen> Andere Einstellungen> Kotlin-Compiler> Ziel-JVM-Version behoben. siehe beigelegtes Foto,

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.