Nie można wstawić kodu bajtowego budowanego z celem JVM 1.8 w kodzie bajtowym budowanym z celem JVM 1.6


479

Podczas próby uruchomienia przykładowego CorDapp ( https://github.com/corda/cordapp-example ) za pośrednictwem IntelliJ pojawia się następujący błąd:

Nie można wstawić kodu bajtowego budowanego z celem JVM 1.8 w kodzie bajtowym budowanym z celem JVM 1.6

Jak mogę zmodyfikować ustawienia IntelliJ, aby cały kod bajtowy był zbudowany z tym samym celem JVM?


5
Udało mi się rozwiązać ten problem, dodając tę ​​bibliotekę do build.gradlezależności {compile ("org.jetbrains.kotlin: kotlin-stdlib-jdk8")}
Munish Chandel

1
@MunishChandel To nie wystarczy. Musimy także zrobić to, co sugeruje poniższa odpowiedź ...
IgorGanapolsky

Odpowiedzi:


1024

app / build.gradle

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

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

GL

Użyj funkcji języka Java 8


31
To powinno być sprawdzone rozwiązanie.
Phil

9
Na tę datę i Android Studio v3.5 jest to jedyne rozwiązanie, które działało, po wypróbowaniu całej reszty. O dziwo ustawienie tej samej wartości w Ustawienia> Kompilator Kotlin nie ma żadnego efektu.
user3399299,

51
Wystarczy kotlinOptions { jvmTarget = "1.8" }powinno wystarczyć.
petter

2
zadziałało, a odpowiedź jest zrozumiała i zwięźle napisana
Vikas Pandey,

4
Następnie powinno „unieważnić pamięć podręczną i zrestartować”
B-GangsteR

214

Możesz rozwiązać ten problem w następujący sposób:

  • Otwórz preferencje IntelliJ
  • Idź do Build, Execution, Deployment> Compiler> Kotlin Compiler ale Other Settings > Kotlin compilerjeśli Android Studio>3.4
  • Zmień Target JVM versionna1.8
  • Kliknij Apply

6
Mam już ustawione ustawienie na 1.8, ale wciąż widzę ten błąd podczas przechodzenia przez punkty przerwania. Widzę to przede wszystkim podczas wyszukiwania zapytań w repozytorium. Jakieś dalsze sugestie? Wygląda na to, że ten docelowy bit JVM nie naprawia go całkowicie.
Arsalan Khalid

38
W strukturze projektu upewnij się, że zmieniłeś również Target platformna JVM 1.8 w swoim Kotlinaspekcie pod Generalzakładką.
Anyul Rivas

7
Ten błąd może pojawić się, jeśli istnieje nierozwiązana zależność !
programaths

5
Dla mnie Kotlin Compilerustawienia zostały umieszczone w Other Settingssekcji.
qwertyfinger

10
Jeśli ponowne uruchomienie po zastosowaniu nie jest wystarczające → Uruchom ponownie i unieważnij pamięci podręczne.
Bartek Lipiński

104

powinieneś skonfigurować coś w następujący sposób w build.gradle

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

14
Lub alternatywnie w tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
DS DS

Masz pomysł, jak to zrobić, aby działało z kotlin-androidwtyczką?
ZeroDivide,

Działa bez większych problemów. Polecam
Mitch

Miałem to w build.gradle, ale jakoś IDEA nadpisała to ustawienie. Odpowiedź od Saeeda działała dla mnie.
nils petersohn

Dodaj to w sekcji Androida {} aplikacji Gradle na poziomie aplikacji.
Parag Kadam

80

W moim przypadku zmiana docelowej wersji JVM w następujący sposób: Plik> Ustawienie> Kompilator Kotlin> Docelowa wersja JVM> 1.8 nie pomogła. Jednak rozwiązuje błąd czasu kompilacji. Ale nie powiodło się w czasie wykonywania.

Musiałem również dodać następujące w pliku build.gradle aplikacji, aby działało.

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

2
działa urok. dzięki
dave o grady

Pracuje! dziękuję
Waldmann,

55

Gdy inne rozwiązania nie działały dla ciebie (zmiana wersji JVM w ustawieniach kompilatora i dodawanie jvmTargetdo twojego build.gradle), z powodu .imlplików wymuszających ich konfigurację możesz zmienić platformę docelową z Ustawień projektu.

  • otwarty File > Project Structure
  • Idź do FacetspodProject Settings
    • Jeśli jest pusty, kliknij mały +przycisk
  • Kliknij moduł / moduły Kotlin
  • Zmiana Target Platformdo JVM 1.8(też lepiej sprawdzić Use project settingsopcję)

3
Nie mogę znaleźć tego ani sekcji „aspekty” w Android Studio ... had Musiałem ręcznie edytować plik app.iml. Ustawiłem <configuration version="3" platform="JVM 1.8" useProjectSettings="false">się truei zadziałało. Plik się jednak zmienia!
Aphex,

1
@Aphex Właściwie jest to w „Plik”> „Struktura projektu”, a następnie w „Ustawieniach projektu”> „Aspekty”, nic tam nie miałem, więc kliknąłem „+”> „Kotlin”> Wybierz mój projekt. To mi się udało :)
Nicolas Guillaume

Działa to dla mnie, ale zmuszanie mnie do powrotu do 1.6 za każdym razem, gdy dodam do mojego pliku build.gradle.kts.
Lou Morda

Czy istnieje sposób, aby to skonfigurować i pobrać z pliku stopni? IMHO to źle skonfigurowane jest błędem w intellij.
Jilles van Gurp,

35

W moim przypadku ten kod nie działał, dopóki nie przejdę apply plugin: 'kotlin-android'od dołu do góry.

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 the trick for me, thx
Didi

32

W Android Studio 4.3.2 dodawanie za pomocą poniższej procedury nie działa.

  1. Otwórz preferencje IntelliJ
  2. Idź do Build, wykonanie, wdrożenie > Compiler > Kotlin Compiler ale inne Ustawienia> Kotlin kompilator czy Android Studio> 3,4
  3. Zmień docelową wersję JVM na 1.8
  4. Kliknij Zastosuj

Powodem jest to, że Android Studio nie może dodać poniższego kodu w pliku Gradle na poziomie modułu. Dodaj go ręcznie.

kotlinOptions {
    jvmTarget = "1.8"
}

Tylko dla dodatku wyszukaj docelową wersję JVM w wyszukiwaniu Android Studio. Zabierze Cię bezpośrednio do opcji. wprowadź opis zdjęcia tutaj


tylko dodając ręcznie, działało to dla mnie. Z jakiegoś powodu Android Studio jest naprawdę wadliwe i nie bierze pod uwagę wprowadzonych zmian, chyba że zrestartujemy ide usuwając całą pamięć podręczną.
Karan Sharma


26

Luty 2020
Android 3.4+
Przejdź do Plik -> Ustawienia -> Kompilator Kotlin -> Docelowa wersja JVM> Ustaw na 1.8, a następnie upewnij się, że zrobisz Plik -> Synchronizuj projekt z plikami Gradle

Lub dodaj to do build.gradle (moduł: aplikacja) w bloku Androida :

kotlinOptions {
           jvmTarget = "1.8"
         }

po prostu „Synchronizuj projekt z plikami Gradle” działa dla mnie ..
Akash Bisariya

potwierdził, że musisz zrobić Plik -> Synchronizuj projekt z plikami Gradle, a następnie działa
Irfandi D. Vendy

19

Jak napisano w dokumentach using-maven ze strony internetowej Kotlin:

Musisz tylko umieścić <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>w sekcji właściwości pliku pom.xml


19

Jeśli masz wiele zestawów / modułów źródłowych, skonfigurowanie jvmTarget dla każdego z nich może być uciążliwe.

Możesz skonfigurować jvmTarget dla wszystkich jednocześnie:

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

Tego fragmentu kodu można używać na najwyższym poziomie pliku gradle.build

Po zmodyfikowaniu pliku ocen Reimport All Gradle Imports. Aby sprawdzić, czy zadziałało, otwórz Project Structurei sprawdź, czy IntelliJ poprawnie przypisany JVM 1.8do wszystkich modułów Kotlin. To powinno wyglądać tak:

struktura projektu

Chciałbym nie zaleca się zmieniania platformę bezpośrednio w IntelliJ, ponieważ ktoś inny klonowania swój projekt po raz pierwszy prawdopodobnie w obliczu tego samego problemu. Prawidłowe skonfigurowanie go w stopniach ma tę zaletę, że IntelliJ zachowuje się dla nich poprawnie od samego początku.


16

W moim przypadku rozwiązałem ten problem, wykonując te dwa kroki

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

Hej, dzięki za odpowiedź. Musiałem zrobić drugi krok i zadziałać. Czy możesz wyjaśnić, dlaczego jest to potrzebne?
hushed_voice

można znaleźć więcej szczegółów na temat tego zamkniętego problemu, dobrze wiedzieć [ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma

Ten link jest martwy
hushed_voice

12

Dla mnie powodem była taka konfiguracja w mojej klasie kompilacji, która była w niektórych modułach, aw niektórych nie

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

1
Dzięki, to było jedyne rozwiązanie, które działało dla mnie. Używam plików kts buiild.
Krames,

Dzięki, to także rozwiązania, które działały dla mnie. I w ten sposób bardzo deklaratywny. stackoverflow.com/a/57041765/3763032 Kevin również to stwierdził, ze względu na smartcast w plikach stopni Kotlin .kts jest dostępny bezpośrednio
mochadwi

12

W przypadku Gradle z językiem Kotlin ( *.gradle.ktspliki) dodaj:

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

Dlaczego musimy przesyłać thisna KotlinJvmOptions. Czy thisodbiornik nie jest już w kotlinOptionsbloku KotlinJvmOptions? Wciąż nie działa dla mnie bez obsady
11m0

1
@ 11m0, myślę, że jest to związane z tym problemem: github.com/gradle/kotlin-dsl-samples/issues/1368
HDW

Gdy nie zostanie znalezione KotlinJvmOptions, spróbuj użyć pełnej nazwy „org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions”.
HDW

4

w większości przypadków to wystarczy:

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

jeśli zadeklarowałeś niestandardowe zadania Gradle, takie jak integrationTestna przykład, dodaj również konfigurację dla compile<YourTaskName>Kotlin:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

działałoby to również poprzez dodanie do pliku stopni -> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1.8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel

co ciekawe, tylko twoje rozwiązanie działało z moim modułem innym niż Android! dzięki!
Mohammad Omidvar

4

Ustawienie sourceCompatibility = JavaVersion.VERSION_1_8włącza usuwanie danych, ale obecnie nie jest w stanie usunąć wszystkich funkcji Java 8 używanych przez kompilator Kotlin.

wprowadź opis zdjęcia tutaj

Poprawka - ustawienie kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8w module aplikacji Gradle rozwiązałoby problem.

Użyj funkcji języka Java 8: 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

Wszystkie odpowiedzi tutaj używają stopniowania, ale jeśli ktoś taki jak ja trafi tutaj i potrzebuje odpowiedzi dla maven:

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

Zmiana z archetypu jetbrains dla kotlin-jvm polega na <configuration></configuration>określeniu jvmTarget. W moim przypadku 11


3

Nic nie działało dla mnie, dopóki nie zaktualizowałem mojej zależności od wtyczek Kotlin.
Spróbuj tego:
1. Unieważnij cahce i uruchom ponownie.
2. Synchronizuj projekt (przynajmniej spróbuj)
3. Przejdź do Plik -> Struktura projektu -> Sugestie
4. Jeśli jest aktualizacja dotycząca Kotlin, zaktualizuj ją.
Mam nadzieję, że to komuś pomoże.


najłatwiejsza naprawa
u84six

2

Jeśli używasz Visual Studio Code ** z rozszerzeniem Kotlin, przejdź do zarządzania wtyczkami Crtl + Shift + x, wpisz kotlin i kliknij Zarządzaj (mały sprzęt) >> Konfiguruj ustawienia rozszerzeń

na Kotlin >> Kompilator >> Jvm: Target - wpisz wersję Java. W mojej sytuacji właśnie wpisałem 1.8

A następnie uruchom ponownie :-)

** vscode lub po prostu „kod” dla systemu Linux


2

W moim przypadku Plik> Ustawienia> Kompilator Kotlin> Docelowa wersja JVM> 1.8


2

Używam Kotlin i Gradle do normalnego programowania JVM (nie dla Androida) i to działało dla mnie w build.gradle:

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

1

Jeśli używasz Eclipse, zakładając, że pobrałeś wtyczkę Kotlin:

Kliknij projekt prawym przyciskiem myszy -> Właściwości -> Kompilator Kotlin -> Włącz ustawienia specyficzne dla projektu -> Wersja docelowa JVM „1.8”


1

W przypadku najnowszych wersji Androida Studio zmiana tylko wersji docelowej maszyny wirtualnej Kotlin nie działała.

Plik Str Struktura projektu ➞ Moduły ( app): ustaw „Zgodność źródła” i „Zgodność docelowa” na „1.8 (Java 8)”. Naciśnij „OK” i zsynchronizuj projekt z Gradle.


1

jeśli jesteś w projekcie Android

w build.gradle aplikacji na Androida {}

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

Za pomocą DSL Kotlin Gradle rozwiązało to problem. Dodałem to do build.gradle.kts. Jest to uzupełnienie odpowiedzi Joela

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

1
Czy możesz podać, gdzie dokładnie w pliku, który umieściłeś? A jakiej wersji wtyczki i stopnia Androida używasz?
treesAreEverywhere

To nie jest projekt na Androida. Używam Gradle 6.4.
Briantical

0

Kolejna wskazówka dla użytkowników Eclipse. Po dwukrotnym sprawdzeniu ustawień docelowych jvm wskazanych przez innych użytkowników nadal miałem ten sam problem, a przyczyną tego był brak biblioteki wykonawczej Kotlin. Na przykład podczas tworzenia projektu z inicjalizatorem wiosennym nie jest on dodawany automatycznie. Aby go dodać: right click on your project -> Build path -> Add libraries... -> User Libraryi po prostu dodajorg.jetbrains.kotlin.core.KOTLIN_CONTAINER

Pamiętaj, aby później odświeżyć swój projekt stopniowy ( right click -> Gradle -> Refresh gradle project)


0

Jeśli masz do czynienia z tym komunikatem w projekcie Spring Boot / Kotlin, po prostu ustaw właściwość „kotlin.compiler.jvmTarget” na „1.8” w pliku pom.xml.

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

0

W moim przypadku jvmTarget został już ustawiony w build.gradlepliku jak poniżej.

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

Ale mój problem wciąż tam był. Ostatecznie rozwiązuje się to po zmianie docelowej wersji JVM z 1.6 na 1.8 w Preferencjach> Inne ustawienia> Kompilator Kotlin> Docelowa wersja JVM. patrz załączone zdjęcie,

wprowadź opis zdjęcia tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.