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?

Joel
źródło
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

Braian Coronel
źródło
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
Joel
źródło
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"
    }
}
Amutan
źródło
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"
     }
 }
Pani Nehaluddin Haider
źródło
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ę)
Saeed Masoumi
źródło
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"
    }
}
Ara Badalyan
źródło
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

Muhammad Maqsood
źródło
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
28

obraz jest wart tysiąca słów

obraz jest wart tysiąca słów

Ahmed D. Sherif
źródło
Również wyszukiwanie w panelu ustawień wyświetli tę opcję. Dzięki za to było naprawdę pomocne!
Princeps Polycap
nie pomógł mi
Waldmann
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"
         }
USMAN osman
źródło
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

Johan Vergeer
źródło
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.

Fabian Braun
źródło
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"
        }
    }
Vikas Sharma
źródło
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 {
AdrianoCententano
źródło
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"
    }
}
Kevin Robatel
źródło
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"
}
naXa
źródło
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"
  }
}
Anoop M.
źródło
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

Mattie
źródło
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.

Waldmann
źródło
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

Hinotori
źródło
2

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

Rachunki
źródło
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()
    }
}
Peter V. Mørch
źródło
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”

Inwestować
źródło
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.

ZzZombo
źródło
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"
    }
}
człowiek z żelaza
źródło
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()
Briantyczny
źródło
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)

malaquf
źródło
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>
    ...
ed3d
źródło
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

Shoaib Mushtaq
źródło