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?

Joel
quelle
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

Braian Coronel
quelle
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
Joel
quelle
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"
    }
}
Amuthan
quelle
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"
     }
 }
Md Nehaluddin Haider
quelle
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 )
Saeed Masoumi
quelle
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"
    }
}
Ara Badalyan
quelle
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

Muhammad Maqsood
quelle
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
28

Ein Bild sagt mehr als tausend Worte

Ein Bild sagt mehr als tausend Worte

Ahmed D. Sherif
quelle
Wenn Sie auch im Einstellungsfeld suchen, wird diese Option angezeigt. Danke dafür war wirklich hilfreich!
Princeps Polycap
hat mir nicht geholfen
Waldmann
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"
         }
USMAN Osman
quelle
Nur "Projekt mit Gradle-Dateien
synchronisieren
bestätigte, dass Sie Datei -> Projekt mit Gradle-Dateien
synchronisieren müssen
19

Wie es im using-maven geschrieben steht Dokumenten von der Kotlin-Website geschrieben steht:

Sie müssen nur <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>in den Eigenschaftenbereich Ihrer pom.xml einfügen

Johan Vergeer
quelle
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.

Fabian Braun
quelle
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"
        }
    }
Vikas Sharma
quelle
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 {
AdrianoCelentano
quelle
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"
    }
}
Kevin Robatel
quelle
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"
}
naXa
quelle
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"
  }
}
Anoop M.
quelle
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

Mattie
quelle
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.

Waldmann
quelle
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

Hinotori
quelle
2

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

Rechnungen
quelle
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()
    }
}
Peter V. Mørch
quelle
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"

Investieren
quelle
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.

ZzZombo
quelle
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"
    }
}
Ironman
quelle
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()
Briantisch
quelle
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)

Malaquf
quelle
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>
    ...
ed3d
quelle
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

Shoaib Mushtaq
quelle