Tidak dapat inline bytecode yang dibangun dengan target JVM 1.8 ke bytecode yang sedang dibangun dengan target JVM 1.6

487

Saat mencoba menjalankan Contoh CorDapp ( https://github.com/corda/cordapp-example ) melalui IntelliJ, saya menerima kesalahan berikut:

Tidak dapat inline bytecode yang dibangun dengan target JVM 1.8 ke bytecode yang sedang dibangun dengan target JVM 1.6

Bagaimana saya bisa memodifikasi pengaturan IntelliJ sehingga semua bytecode dibangun dengan target JVM yang sama?

Joel
sumber
5
Saya dapat menyelesaikan masalah ini dengan menambahkan perpustakaan ini ke build.gradledependensi {compile ("org.jetbrains.kotlin: kotlin-stdlib-jdk8")}
Munish Chandel
1
@MunishChandel Itu tidak cukup. Kita juga harus melakukan apa yang disarankan oleh jawaban di bawah ini ...
IgorGanapolsky

Jawaban:

1038

app / build.gradle

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

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

GL

Gunakan fitur bahasa Java 8

Braian Coronel
sumber
32
Ini harus menjadi solusi yang diperiksa.
Phil
9
Pada tanggal ini dan Android Studio v3.5 ini adalah satu-satunya solusi yang berhasil, setelah mencoba yang lainnya. Anehnya, pengaturan nilai yang sama di Pengaturan> Kotlin Compiler tidak berpengaruh.
user3399299
53
Hanya kotlinOptions { jvmTarget = "1.8" }harus cukup.
petter
2
bekerja, dan jawabannya cukup jelas dan ditulis dengan ringkas
Vikas Pandey
4
Maka harus "invalidate cache and restart"
B-GangsteR
214

Anda dapat memperbaiki masalah ini sebagai berikut:

  • Buka preferensi IntelliJ
  • Pergi ke Build, Execution, Deployment> Compiler> Kotlin Compiler TAPI Other Settings > Kotlin compilerjika Android Studio>3.4
  • Ubah Target JVM versionke1.8
  • Klik Apply
Joel
sumber
6
Pengaturan ini sudah saya perbaiki ke 1.8, namun saya masih melihat kesalahan ini ketika melewati breakpoints. Saya terutama melihat ini ketika memukul permintaan lemari besi. Ada saran lebih lanjut? Tampaknya target JVM bit ini tidak sepenuhnya memperbaikinya.
Arsalan Khalid
38
Pada Struktur Proyek Anda , pastikan Anda juga mengubah Target platformke JVM 1.8 pada KotlinFacet Anda di bawah Generaltab.
Anyul Rivas
7
Kesalahan ini dapat muncul jika ada ketergantungan yang tidak terselesaikan !
programath
5
Bagi saya Kotlin Compilerpengaturan sebenarnya ditempatkan di Other Settingsbagian.
qwertyfinger
10
Jika memulai kembali setelah menerapkan tidak cukup → Mulai ulang & Batalkan cache.
Bartek Lipinski
104

Anda harus mengkonfigurasi sesuatu seperti berikut di build.gradle

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
Amuthan
sumber
14
Atau sebagai alternatif, dalam Gradle Kotlin DSL:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
breandan
Adakah yang tahu cara membuatnya berfungsi dengan kotlin-androidplugin?
ZeroDivide
Bekerja tanpa banyak kesulitan. Saya akan merekomendasikannya
Mitch
Saya punya ini di build.gradle, tapi entah bagaimana IDEA menimpa pengaturan ini. Jawaban dari Saeed bekerja untuk saya.
nils petersohn
Tambahkan ini di bagian {} Android level-level Gradle aplikasi Anda.
Parag Kadam
80

Dalam kasus saya, hanya mengubah Versi JVM Target seperti ini: File> Pengaturan> Kotlin Compiler> Target Versi JVM> 1.8 tidak membantu. Namun, itu menyelesaikan kesalahan waktu kompilasi. Tetapi gagal saat runtime.

Saya juga harus menambahkan berikut dalam file app build.gradle untuk membuatnya berfungsi.

 android {
     // Other code here...
     kotlinOptions {
        jvmTarget = "1.8"
     }
 }
Md Nehaluddin Haider
sumber
2
bekerja pesona. terima kasih
dave o grady
bekerja! terima kasih
Waldmann
55

Ketika solusi lain tidak bekerja untuk Anda (Mengubah versi JVM pada pengaturan Compiler dan menambahkan jvmTargetke Anda build.gradle), karena .imlfile Anda mencoba untuk memaksa konfigurasi mereka, Anda dapat mengubah platform target dari Pengaturan Proyek.

  • Buka File > Project Structure
  • Pergi ke FacetsbawahProject Settings
    • Jika kosong maka klik +tombol kecil
  • Klik pada modul Kotlin Anda
  • Ubah Target Platformke JVM 1.8(juga lebih baik untuk memeriksa Use project settingsopsi)
Saeed Masoumi
sumber
3
Saya tidak dapat menemukan ini atau bagian 'aspek' di Android Studio ... 🤔 Saya harus mengedit app.iml secara manual. Aku mengatur <configuration version="3" platform="JVM 1.8" useProjectSettings="false">untuk truedan bekerja. Namun, file terus berubah kembali!
Aphex
1
@Aphex Ini sebenarnya di bawah "File"> "Struktur Proyek" kemudian di bawah "Pengaturan Proyek"> "Aspek", saya tidak ada di sana, jadi saya klik "+"> "Kotlin"> Pilih proyek saya. Itu berhasil untuk saya :)
Nicolas Guillaume
Ini berfungsi untuk saya, tetapi dipaksa kembali ke 1.6 setiap kali saya menambahkan ke file build.gradle.kts saya.
Lou Morda
Apakah ada cara untuk mengkonfigurasi dan mengambil ini dari file gradle? IMHO ini menjadi salah konfigurasi adalah bug di intellij.
Jilles van Gurp
35

Dalam kasus saya, kode ini tidak berfungsi sampai saya pindah apply plugin: 'kotlin-android'dari bawah ke atas.

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
sumber
kotlinOptions {jvmTarget = "1.8"} Didi trik untuk saya, thx
Didi
32

Di Android Studio 4.3.2 menambahkan melalui prosedur di bawah ini tidak berfungsi.

  1. Buka preferensi IntelliJ
  2. Pergi ke Build, Execution, Deployment > Compiler > Kotlin Compiler TAPI Pengaturan Lainnya> Compiler Kotlin jika Android Studio> 3.4
  3. Ubah versi Target JVM ke 1.8
  4. Klik Terapkan

Alasannya, Android studio tidak dapat menambahkan kode di bawah ini dalam file Gradle tingkat modul. Silakan tambahkan secara manual.

kotlinOptions {
    jvmTarget = "1.8"
}

Hanya untuk addon, cari versi Target JVM di pencarian studio android. Ini akan membawa Anda langsung ke opsi. masukkan deskripsi gambar di sini

Muhammad Maqsood
sumber
hanya dengan menambahkan secara manual, itu berhasil untuk saya. Untuk beberapa alasan, android studio benar-benar buggy dan tidak mempertimbangkan perubahan yang diterapkan kecuali kita memulai ulang idenya dengan menghapus semua cache.
Karan Sharma
28

sebuah gambar bernilai ribuan kata

sebuah gambar bernilai ribuan kata

Ahmed D. Sherif
sumber
Pencarian di panel pengaturan juga akan memunculkan opsi ini. Terima kasih untuk ini sangat membantu!
Princeps Polycap
tidak membantu saya
Waldmann
26

Feb 2020
android 3.4+
Buka File -> Pengaturan -> Kotlin Compiler -> Target Versi JVM> atur ke 1.8 dan kemudian pastikan untuk melakukan File -> Sinkronkan proyek dengan file Gradle

Atau tambahkan ini ke build.gradle (module: app) di blok android :

kotlinOptions {
           jvmTarget = "1.8"
         }
OSMAN USMAN
sumber
hanya "Sinkronkan proyek dengan file Gradle" berfungsi untuk saya ..
Akash Bisariya
mengkonfirmasi bahwa Anda perlu melakukan File -> Sinkronkan proyek dengan file Gradle, kemudian berfungsi
Irfandi D. Vendy
19

Seperti yang tertulis dalam dokumen maven-use dari situs web Kotlin:

Anda hanya perlu memasukkan <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>ke bagian properti pom.xml Anda

Johan Vergeer
sumber
19

Jika Anda memiliki banyak sourceet / modul, akan sulit untuk mengkonfigurasi jvmTarget untuk masing-masing secara terpisah.

Anda dapat mengkonfigurasi jvmTarget untuk semuanya sekaligus seperti:

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

Cuplikan ini dapat digunakan di tingkat atas file gradle.build Anda

Setelah memodifikasi file gradle Reimport All Gradle Imports. Untuk memeriksa apakah itu berhasil, buka Project Structuredan verifikasi bahwa IntelliJ ditugaskan dengan benar JVM 1.8ke semua Modul Kotlin. Seharusnya terlihat seperti ini:

struktur proyek

Saya tidak akan merekomendasikan mengubah platform secara langsung di IntelliJ, karena siapa pun yang mengkloning proyek Anda untuk pertama kalinya kemungkinan akan menghadapi masalah yang sama. Mengkonfigurasi dengan benar secara gradle memiliki keuntungan bahwa IntelliJ akan berperilaku benar untuk mereka sejak awal.

Fabian Braun
sumber
16

Dalam kasus saya, saya menyelesaikan ini dengan mengikuti dua langkah ini

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
sumber
Hai terima kasih atas jawabannya, saya harus melakukan langkah ke-2, dan berhasil. Bisakah Anda menjelaskan mengapa itu diperlukan?
hushed_voice
Anda dapat menemukan rincian lebih lanjut tentang masalah tertutup ini. Ada baiknya untuk mengetahui [ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma
Tautan itu mati
hushed_voice
12

Bagi saya alasannya adalah konfigurasi ini dalam build gradle saya ada di beberapa modul dan beberapa tidak

android {  
...      
kotlinOptions {
        val options = this as KotlinJvmOptions
        options.jvmTarget = "1.8"
    }
...
android {
AdrianoCelentano
sumber
1
Terima kasih, ini adalah satu-satunya solusi yang berhasil untuk saya. Saya menggunakan file kts buiild.
Krames
Terima kasih, ini juga solusi yang bekerja untuk saya. Dan banyak deklaratif dengan cara ini. stackoverflow.com/a/57041765/3763032 kevin juga menyatakan ini, karena smartcast dalam file gradlin kotlin .kts tersedia secara langsung
mochadwi
12

Untuk Gradle dengan bahasa Kotlin ( *.gradle.ktsfile), tambahkan ini:

android {
    [...]
    kotlinOptions {
        this as KotlinJvmOptions
        jvmTarget = "1.8"
    }
}
Kevin Robatel
sumber
Mengapa kita perlu pemain thisuntuk KotlinJvmOptions. Bukankah thispenerima di kotlinOptionsblok sudah KotlinJvmOptions? Tetap tidak bekerja untuk saya tanpa para pemain
11m0
1
@ 11m0, saya pikir ini terkait dengan masalah ini: github.com/gradle/kotlin-dsl-samples/issues/1368
HDW
Ketika KotlinJvmOptions tidak ditemukan, coba gunakan nama lengkap "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions".
HDW
4

dalam kebanyakan kasus ini sudah cukup:

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

jika Anda telah mendeklarasikan tugas Gradle khusus seperti integrationTestmisalnya, tambahkan konfigurasi compile<YourTaskName>Kotlinjuga:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
naXa
sumber
ini akan bekerja juga dengan menambahkan ke file gradle -> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1.8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel
Menariknya, hanya solusi Anda yang bekerja dengan modul non-android saya! Terima kasih!
Mohammad Omidvar
4

Pengaturan sourceCompatibility = JavaVersion.VERSION_1_8memungkinkan desugaring, tetapi saat ini tidak dapat menghapus semua fitur Java 8 yang digunakan oleh kompiler Kotlin.

masukkan deskripsi gambar di sini

Perbaiki - Pengaturan kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8dalam modul aplikasi Gradle akan memperbaiki masalah.

Gunakan fitur bahasa 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
sumber
3

Semua jawaban di sini menggunakan gradle tetapi jika seseorang seperti saya berakhir di sini dan membutuhkan jawaban untuk pakar:

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

Perubahan dari pola pikir jetbrains untuk kotlin-jvm adalah <configuration></configuration>menentukan jvmTarget. Dalam kasus saya 11

mattie
sumber
3

Tidak ada yang berhasil untuk saya sampai saya memperbarui ketergantungan plugin kotlin saya.
Coba ini:
1. Validasi cahce dan mulai ulang.
2. Sinkronkan proyek (setidaknya cobalah)
3. Buka File -> Struktur Proyek -> Saran
4. Jika ada pembaruan tentang Kotlin, perbarui.
Semoga ini bisa membantu seseorang.

Waldmann
sumber
perbaikan termudah
u84six
2

Jika menggunakan Visual Studio Code ** dengan ekstensi Kotlin, pergi ke manajemen plugin Crtl + Shift + x, ketik kotlin dan klik kelola (gir kecil) >> Konfigurasikan Pengaturan Ekstensi

di Kotlin >> Compiler >> Jvm: Target - ketikkan versi java. Dalam situasi saya hanya mengetik 1,8

Dan kemudian restart :-)

** vscode atau hanya 'kode' untuk linux

Hinotori
sumber
2

Dalam kasus saya File> Setting> Kotlin Compiler> Target JVM Version> 1.8

Tagihan
sumber
2

Saya menggunakan Kotlin dan Gradle untuk pengembangan JVM normal, (bukan android) dan ini bekerja untuk saya di build.gradle:

allprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
    }
}
Peter V. Mørch
sumber
2

jika Anda berada di proyek android

di build.gradle aplikasi Anda di bawah 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"
    }
}
manusia Besi
sumber
1

Jika Anda menggunakan Eclipse dengan asumsi Anda mengunduh plugin Kotlin:

Klik kanan proyek -> Properti -> Kotlin Compiler -> Aktifkan pengaturan spesifik proyek -> versi target JVM "1.8"

Menginvestasikan
sumber
1

Untuk versi terbaru dari Android Studio, jika hanya mengubah versi Kotlin Target VM tidak berfungsi.

File ➞ Struktur Proyek ➞ Modul ( app): atur "Kompatibilitas Sumber" dan "Kompatibilitas Target" menjadi "1,8 (Java 8)". Tekan "OK" dan sinkronkan proyek dengan Gradle.

ZzZombo
sumber
1

Menggunakan Kotlin Gradle DSL, ini memecahkan masalah bagi saya. Saya menambahkan ini ke build.gradle.kts. Ini adalah tambahan dari jawaban Joel

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
Briantikal
sumber
1
Bisakah Anda berbagi di mana tepatnya dalam file yang Anda masukkan ini? Dan versi plugin dan gradle android mana yang Anda gunakan?
treesAreEverywhere
Ini bukan proyek Android. Saya menjalankan Gradle 6.4.
Briantical
0

Petunjuk lain untuk pengguna Eclipse. Setelah mengecek pengaturan target jvm yang ditunjukkan oleh pengguna lain, saya masih memiliki masalah yang sama, dan itu disebabkan oleh hilangnya Perpustakaan Kotlin Runtime. Misalnya, ketika membuat proyek dengan inisialisasi pegas, itu tidak ditambahkan secara otomatis. Untuk menambahkannya:, right click on your project -> Build path -> Add libraries... -> User Librarydan cukup tambahkanorg.jetbrains.kotlin.core.KOTLIN_CONTAINER

Pastikan Anda menyegarkan proyek gradle Anda setelahnya ( right click -> Gradle -> Refresh gradle project)

malaquf
sumber
0

Jika Anda menghadapi pesan ini dalam proyek Spring Boot / Kotlin, cukup atur properti "kotlin.compiler.jvmTarget" menjadi "1,8" di pom.xml Anda.

    <properties>
        <kotlin.version>1.3.70</kotlin.version>
        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
    </properties>
    ...
ed3d
sumber
0

Dalam kasus saya, jvmTarget telah ditetapkan dalam build.gradlefile seperti di bawah ini.

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

Tapi masalah saya masih ada. Akhirnya, itu diselesaikan setelah Mengubah versi Target JVM dari 1,6 ke 1,8 di Preferensi> Pengaturan Lainnya> Kotlin Compiler> Target JVM versi. lihat gambar terlampir,

masukkan deskripsi gambar di sini

Shoaib Mushtaq
sumber