JVM target 1.8 ile oluşturulan bayt kodu, JVM target 1.6 ile oluşturulan bayt koduna satılamaz


491

IntelliJ aracılığıyla Örnek CorDapp'ı ( https://github.com/corda/cordapp-example ) çalıştırmaya çalışırken aşağıdaki hatayı alıyorum:

JVM target 1.8 ile oluşturulan bayt kodu, JVM target 1.6 ile oluşturulan bayt koduna satılamaz

Tüm bayt kodlarının aynı JVM hedefiyle oluşturulması için IntelliJ ayarlarını nasıl değiştirebilirim?


5
Bu sorunu build.gradle{compile ("org.jetbrains.kotlin: kotlin-stdlib-jdk8")} bağımlılıklarına ekleyerek bu sorunu çözebildim
Munish Chandel

1
@MunishChandel Bu yeterli değil. Ayrıca aşağıdaki cevabın önerilerini de yapmalıyız ...
IgorGanapolsky

Yanıtlar:


1045

Uygulamanın / build.gradle

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

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

GL

Java 8 dil özelliklerini kullanma


32
Bu kontrol edilen çözelti olmalıdır.
Phil

9
Bu tarih ve Android Studio v3.5 itibariyle, geri kalan her şeyi denedikten sonra çalışan tek çözüm budur. Tutarlı bir şekilde Ayarlar> Kotlin Derleyici'de aynı değerin ayarlanmasının hiçbir etkisi yoktur.
user3399299

53
Sadece kotlinOptions { jvmTarget = "1.8" }yeterli olmalı.
petter

2
çalıştı ve cevap kendini açıklayıcı ve kısaca yazılmış
Vikas Pandey

4
Sonra "önbelleği geçersiz
kılmalı

216

Bu sorunu aşağıdaki gibi düzeltebilirsiniz:

  • IntelliJ tercihlerini açın
  • Git Build, Execution, Deployment> Compiler> Kotlin Compiler AMA Other Settings > Kotlin compilerAndroid Studio if>3.4
  • Değişim Target JVM versionTo1.8
  • Tıklayın Apply

6
Bu ayar zaten 1.8 olarak sabitlenmiş, ancak yine de kesme noktalarında adım atarken bu hatayı görüyorum. Bunu öncelikle kasa sorgularına basarken görüyorum. Başka öneriniz var mı? Görünüşe göre bu hedef JVM biti onu tamamen düzeltmiyor.
Arsalan Khalid

38
Senin üzerinde Proje Yapısı , ayrıca değiştirmek emin olun Target platformiçin JVM 1.8 senin üzerinde Kotlinaltında Faset Generalsekmesi.
Anyul Rivas

7
Çözümlenmemiş bir bağımlılık varsa bu hata görünebilir !
programaths

5
Benim için Kotlin Compilerayarlar aslında Other Settingsbölüme yerleştirildi .
qwertyfinger

10
Uygulamanın ardından yeniden başlatma yeterli değilse → Yeniden başlat & Önbellekleri geçersiz kıl.
Bartek Lipinski

105

build.gradle içinde aşağıdaki gibi bir şey yapılandırmalısınız

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

15
Veya alternatif olarak, Gradle Kotlin DSL'de:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
breandan

Bu kotlin-androideklenti ile çalışmak için nasıl bir fikir ?
ZeroDivide

Fazla uğraşmadan çalışır. Bunu tavsiye ederim
Mitch

Bunu build.gradle'da buldum, ancak bir şekilde IDEA bu ​​ayarın üzerine yazdı. Saeed'in Yanıtı benim için çalıştı.
nils petersohn

Bunu uygulama düzeyindeki Gradle'ın android {} bölümüne ekleyin.
Parag Kadam

80

Benim durumumda, sadece Hedef JVM Sürümü şu şekilde değiştiriliyor: Dosya> Ayar> Kotlin Derleyici> Hedef JVM Sürümü> 1.8 yardımcı olmadı. Ancak, derleme zamanı hatası çözüldü. Ancak çalışma zamanında başarısız oldu.

Ben de çalışması için app build.gradle dosyasında aşağıdaki eklemek zorunda kaldı.

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

2
bir cazibe çalışır. teşekkürler
dave o grady

İşler! teşekkür ederim
Waldmann

55

Diğer çözümler sizin için çalışmadığında (Derleyici ayarlarında JVM sürümünü değiştirme ve jvmTargetiçine ekleme build.gradle), .imldosyalarınızı yapılandırmalarını zorlamaya çalıştığından, hedef platformu Proje Ayarları'ndan değiştirebilirsiniz.

  • Açık File > Project Structure
  • Git FacetsaltındakilerProject Settings
    • Boşsa, küçük +düğmeye tıklayın
  • Kotlin modülünüzü / modüllerinizi tıklayın
  • Değişim Target Platformiçin JVM 1.8(aynı zamanda kontrol etmek daha iyidir Use project settingsseçeneği)

3
Bunu veya Android Studio'daki 'fasets' bölümünü bulamıyorum ... 🤔 app.iml dosyasını manuel olarak düzenlemek zorunda kaldım. Ben set <configuration version="3" platform="JVM 1.8" useProjectSettings="false">etmek trueve işe yaradı. Ancak, dosya sürekli değişiyor!
Aphex

1
@Aphex Aslında "Dosya"> "Proje Yapısı" altında sonra "Proje Ayarları"> "Elmas" altında hiçbir şey yoktu, bu yüzden "+"> "Kotlin"> projemi seçtim. Bu benim için yaptı :)
Nicolas Guillaume

1
Bu benim için çalışıyor, ancak build.gradle.kts dosyama her eklediğimde 1.6'ya geri dönmek zorunda kalıyorum.
Lou Morda

Bunu yapılandırmanın ve sınıf dosyasından almanın bir yolu var mı? IMHO bu yanlış yapılandırılmış bir intellij hatası.
Jilles van Gurp

36

Benim durumumda bu kod aşağıdan apply plugin: 'kotlin-android'yukarıya hareket edene kadar işe yaramadı .

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"} Benim için hile, thx
Didi

32

Android Studio 4.3.2'de aşağıdaki yordamı kullanarak ekleme çalışmaz.

  1. IntelliJ tercihlerini açın
  2. Git , Yürütme, Dağıtım İnşa > Derleyici > Kotlin Compiler AMA Diğer Ayarlar> Android Studio eğer Kotlin derleyici> 3.4
  3. Değiştir Hedef JVM sürüm 1.8
  4. Uygula'yı tıklayın

Bunun nedeni, Android stüdyosunun modül düzeyinde Gradle dosyasına aşağıdaki kodu ekleyememesi. Lütfen manuel olarak ekleyin.

kotlinOptions {
    jvmTarget = "1.8"
}

Sadece addon için android stüdyo arama Hedef JVM sürümünü arayın. Sizi doğrudan seçeneğe götürür. resim açıklamasını buraya girin


sadece elle ekleyerek benim için çalıştı. Bazı nedenlerden dolayı, android studio gerçekten buggy ve tüm önbelleği silerek IDE'yi yeniden başlatmadıkça uygulanan değişiklikleri dikkate almıyor.
Karan Sharma


26

Şubat 2020
android 3.4+ Dosyaya
Git -> Ayarlar -> Kotlin Derleyici -> Hedef JVM Sürümü> 1.8 olarak ayarlayın ve ardından Dosya -> Projeyi Gradle dosyalarıyla senkronize et

Veya bunu build.gradle (module: app) dizinine ekleyin de robot bloğun

kotlinOptions {
           jvmTarget = "1.8"
         }

sadece "Proje Gradle dosyaları ile senkronize et" benim için çalışıyor ..
Akash Bisariya

Dosya -> Proje'yi Gradle dosyalarıyla senkronize etmeniz gerektiğini doğruladı, sonra işe yarıyor
Irfandi D. Vendy

19

Using-Maven'de yazıldığı gibiKotlin web sitesinden kullanım amaçlı belgelerinde :

Sen koymak zorunda sadece <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>senin pom.xml özellikleri bölümüne


19

Çok sayıda kaynak kümeniz / modülünüz varsa, jvmTarget öğesini her biri için ayrı ayrı yapılandırmak hantal olabilir.

JvmTarget'ı hepsi için aynı anda yapılandırabilirsiniz:

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

Bu snippet gradle.build dosyanızın en üst düzeyinde kullanılabilir

Gradle dosyasını değiştirdikten sonra Reimport All Gradle Imports. İşe yaradı eğer açık, kontrol etmek Project Structureve IntelliJ doğru atanmış olduğunu doğrulamak JVM 1.8tüm Kotlin-Modülleri için. Şöyle görünmelidir:

proje yapısı

Ben ediyorum değil başkasının ilk kez projenizi klonlama çünkü aynı durumla yüz yüze muhtemeldir intellij doğrudan platformu değişen öneriyoruz. Sınıfta doğru şekilde yapılandırılması, IntelliJ'in en başından itibaren onlar için doğru davranması avantajına sahiptir.


16

Benim durumumda, bu iki adımı izleyerek çözdüm

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

Hey cevap için teşekkürler, 2. adımı ve onun çalışmasını yapmak zorunda kaldım. Neden gerekli olduğunu açıklayabilir misiniz?
hushed_voice

bu kapalı konu hakkında daha fazla bilgi bulabilirsiniz [ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma

Bu bağlantı öldü
hushed_voice

12

Benim için neden bu derlememdeki bu konfigürasyonun bazı modüllerde olması ve bazılarında

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

1
Teşekkürler, bu benim için işe yarayan tek çözümdü. Ben kts buiild dosyaları kullanıyorum.
Krames

Teşekkürler, bu da benim için çalışan çözümler. Ve bu şekilde çok beyan edici. stackoverflow.com/a/57041765/3763032 kevin da bunu belirtti, kotlin gradle dosyalarındaki smartcast nedeniyle .kts doğrudan kullanılabilir
mochadwi

12

Kotlin diliyle ( *.gradle.ktsdosyalar) Gradle için şunu ekleyin:

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

Do Neden döküm gerek thisiçin KotlinJvmOptions. thisAlıcı kotlinOptionszaten blokta değil KotlinJvmOptionsmi? Hala oyuncu olmadan benim için çalışmıyor
11m0

1
@ 11m0, bu konuyla ilgili olduğunu düşünüyorum: github.com/gradle/kotlin-dsl-samples/issues/1368
HDW

KotlinJvmOptions bulunamadığı zaman, "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions" tam adını kullanmayı deneyin.
HDW

4

çoğu durumda bu yeterlidir:

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

integrationTestörneğin gibi özel Gradle görevleri bildirdiyseniz , aşağıdakiler için de bir yapılandırma ekleyin compile<YourTaskName>Kotlin:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

bu, gradle dosyasına ekleyerek de işe yarayacaktır -> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1.8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel

İlginçtir, sadece çözümünüz android olmayan modülümle çalıştı! Teşekkürler!
Mohammad Omidvar

4

Ayar sourceCompatibility = JavaVersion.VERSION_1_8hata ayıklamayı etkinleştirir, ancak şu anda Kotlin derleyicisinin kullandığı tüm Java 8 özelliklerini ayıklayamıyor.

resim açıklamasını buraya girin

Onar - kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8Uygulama modülünün Gradle'da ayarlanması sorunu çözecektir.

Java 8 dil özelliklerini kullanın: 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

Buradaki tüm cevaplar gradle kullanıyor, ancak benim gibi biri burada bitiyor ve maven için cevaba ihtiyaç duyuyorsa:

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

Kotlin-jvm için jetbrains arketipinden gelen değişiklik jvmTarget'ın <configuration></configuration>belirtilmesidir. Benim durumumda 11


3

Kotlin eklentisi bağımlılığımı güncelleyene kadar hiçbir şey benim için işe yaramadı.
Bunu deneyin:
1. Cahce değerini geçersiz kılın ve yeniden başlatın.
2. Projeyi senkronize edin (en azından yapmaya çalışın)
3. Git Dosya -> Proje Yapısı -> Öneriler
4. Kotlin ile ilgili bir güncelleme varsa, güncelleyin.
Umarım birine yardım eder.


en kolay düzeltme
u84six

2

Kotlin uzantılı Visual Studio Code ** kullanıyorsanız, eklenti yönetimi Crtl + Shift + x'e gidin, kotlin yazın ve yönet (küçük dişli) üzerine tıklayın >> Uzantı Ayarlarını Yapılandır

Kotlin >> Derleyici >> Jvm: Hedef - java sürümünü yazın. Benim durumumda sadece 1.8 yazdım

Ve sonra yeniden başlatın :-)

** vscode veya linux için sadece 'kod'


2

Benim durumumda Dosya> Ayar> Kotlin Derleyici> Hedef JVM Sürümü> 1.8


2

Kotlin ve Gradle'ı normal JVM gelişimi için kullanıyorum (android değil) ve bu benim için çalıştı build.gradle:

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

2

android projesindeysen

android {} altındaki uygulamanızın build.gradle dosyasında

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

Eclipse'i Kotlin eklentisini indirdiğinizi varsayarsanız:

Projeye sağ tıklayın -> Özellikler -> Kotlin Derleyici -> Projeye özgü ayarları etkinleştir -> JVM hedef sürümü "1.8"


1

Android Studio'nun son sürümlerinde, yalnızca Kotlin Target VM sürümünü değiştirmek işe yaramazsa.

Dosya ➞ Proje Yapısı ➞ Modüller ( app): hem "Kaynak Uyumluluğu" hem de "Hedef Uyumluluğu" nu "1.8 (Java 8)" olarak ayarlayın. "OK" tuşuna basın ve projeyi Gradle ile senkronize edin.


1

Kotlin Gradle DSL kullanarak bu benim için sorunu çözdü. Bunu build.gradle.kts dosyasına ekledim. Bu Joel'in cevabına ek olarak

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

1
Bunu tam olarak nereye koyduğunuzu paylaşır mısınız? Ve android eklentisinin ve sürümünün hangi sürümünü kullanıyorsunuz?
ağaçlarAreEverywhere

Bu bir Android projesi değil. Gradle 6.4 kullanıyorum.
Briantical

1

Benim durumumda, jvmTarget zaten build.gradledosyada aşağıdaki gibi ayarlanmış .

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

Ama benim sorunum hala oradaydı. Son olarak, Tercihler> Diğer Ayarlar> Kotlin Derleyici> Hedef JVM sürümünde Hedef JVM sürümünü 1.6'dan 1.8'e değiştirdikten sonra çözülür. ekli resme bakın,

resim açıklamasını buraya girin


0

Eclipse kullanıcıları için başka bir ipucu. Diğer kullanıcılar tarafından işaret jvm hedef ayarlarını iki kez kontrol ettikten sonra, hala aynı sorunu vardı ve bu Kotlin Runtime Library eksik neden oldu. Örneğin, spring initializr ile bir proje oluştururken, otomatik olarak eklenmez. right click on your project -> Build path -> Add libraries... -> User LibraryEklemek için: ve ekleyinorg.jetbrains.kotlin.core.KOTLIN_CONTAINER

Daha sonra sınıf projenizi yenilediğinizden emin olun ( right click -> Gradle -> Refresh gradle project)


0

Bir Spring Boot / Kotlin projesinde bu iletiyle karşılaşıyorsanız, pom.xml dosyanızda "kotlin.compiler.jvmTarget" özelliğini "1.8" olarak ayarlamanız yeterlidir.

    <properties>
        <kotlin.version>1.3.70</kotlin.version>
        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
    </properties>
    ...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.