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?


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


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

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

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

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)

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

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


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


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

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


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.


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

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 {

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

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

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

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


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.


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


2

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


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()
    }
}

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

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"


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.


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

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)


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.