Kotlin gradle eklentisi neden 1.8 hedefle kurulamıyor?


93

Kotlin 1.2.10 için intellij kullanarak yapılandırılmış en basit gradle projesine sahibim. İşte build.gradle dosyam:

buildscript {
    ext.kotlin_version = '1.2.10'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'com.ali'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'kotlin'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

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

Ve basit bir java arayüzüm var:

public interface MyMath {
    static int myAbs(int input) {
        return Math.abs(input);
    }
}

Bu arayüzü içe aktardığımda ve myAbsyöntemi çağırmayı denediğimde şu hatayla başarısız oluyor:

Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'

Bir intellij kotlin uygulaması oluşturdum ve düzgün çalışıyordu. Yeni Kotlin gradle eklentisinde bir hata mı var?


JDK 8'iniz var mı?
— Zoe

Evet ve bu sorun yalnızca projeyi intellij'de oluşturduğumda oluyor. terminaldeki gradle iyi çalışıyor!
— alisabzevari

Kullandığınız IDE eklenti sürümü nedir? 1.2.21 eklentisi ile hatayı yeniden oluşturamadım. Bu daha yeni Gradle & IDE eklenti sürümlerinde de meydana gelirse, kotl.in/issue adresinde bir sorun oluşturabilir ve hataya neden olan adımları tam olarak açıklayabilirsiniz.
— kısayol tuşu

Yanıtlar:


179

Bunun Mac'te Android Studio 3.2 kullananlar için faydalı olabileceğini düşünüyorum.

Kotlin Derleyici Hedef JVM sürümünü değiştirmek için Android Studio -> Tercihler -> Kotlin Derleyicisine gitmeli ve ardından açılır menüden Hedef JVM sürümünü seçmelisiniz.

Her neyse, hala aşağıdaki hatayı alıyorum

Java arabirimlerindeki statik yöntemlere yapılan çağrılar, JVM hedef 1.6'da yasaklanmıştır. '-Jvm-target 1.8' ile yeniden derleyin

ÇÖZÜLDÜ

Build.gradle'a aşağıdakileri eklemek sorunu çözdü:

android {
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

Bu ve diğer Gradle yapılandırma seçenekleri hakkında: https://kotlinlang.org/docs/reference/using-gradle.html


Kotlin Gradle DSL ile:

import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions

(kotlinOptions as KotlinJvmOptions).apply {
    jvmTarget = JavaVersion.VERSION_1_8.toString()
}

20
Android projeleri için Kotlin derleyici hedef JVM sürümünün Android Studio tercihlerinde değil build.gradle'da değiştirilmesi gerekir. Android Studio tercihlerindeki değişiklikler komut satırı derlemelerini etkilemeyecektir.
— yole

1
Bunun için teşekkürler, harika yardım @yole
— Curyous

Bunun için teşekkürler, harika yardım,
— lotosbin

2
Harika, yardımcı oluyor! Ve bu appgradle btw.
— Wesely

2
Bunu kök build.gradle dosyasında ayarlamak mümkün mü? Bunu çok modüllü bir projede modüller arasında yönetmek zahmetli.
— robotsquidward

76

Intellij ayarlarında kotlin derleyici yapılandırmam olduğu ortaya çıktı. In Settings > Build, Execution, Deployment > Compiler > Kotlin Compileradlı bir ayara Target JVM version1.8 olarak ayarlanmış olmalıdır.


3
Benim versiyonumdaSettings -> Other Settings -> Kotlin Compiler -> Target JVM Version
— ElyashivLavi

6
Ama 1.8'e ayarlandığında bile, yine de Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
— alıyorum

Ben yok Other Settingsmadende!
— alisabzevari

39
Benim durumumda Project Structure -> Facets -> Kotling -> Target Platform
— düzeltiyorum

Aslında, yukarıdakilerin hepsini ayarladım ve daha fazla mesaj yok ... henüz. IJ 2018.1.5 Kotlin 1.2.50.
— softjake

21

Lütfen aşağıdaki üç öğeye sahip olup olmadığınızı kontrol edin:

  1. build.gradle içindeki kotlin seçenekleri
    kotlinOptions {
        jvmTarget = '1.8'
    }
  1. İlgili Fikir tercihlerini kontrol edin Tercihler

  2. Proje Özelliklerini Kontrol Edin görüntü açıklamasını buraya girin


16

Kotlin eklentisi tarafından kullanılabilen bir gradle özelliği vardır. Eklediğinizde

kotlin.setJvmTargetFromAndroidCompileOptions = true

sizin için gradle.propertiesdosyanın. Bu yapılandırmaya sahip olduğunuzdabuild.config

android{
  compileOptions {
      sourceCompatibility = 1.8
      targetCompatibility = 1.8
  }
}

sorun çözülmeli.


Ben üzerinde çalışıyordu proje sourceCompatibility ve targetCompatibilityyapılandırılmış ancak ekleyerek kotlin.setJvmTargetFromAndroidCompileOptions = truebenim için sorun çözüldü
— Fdo

6

// Aşağıdaki kodu Derleme notunuza eklemeniz yeterlidir (Modül: uygulama)

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

2

Bu benim için Kotlin DSL ile Gradle'da çalıştı:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()

1

Bunun neden işe yaradığından tam olarak emin değilim, ancak Fikir'deki ayarı değiştirmeyi deneyebilirsiniz. Komut satırından Gradle çalıştığından, ancak IntelliJ'den derlerken çalışmadığından bu muhtemelen köktür.

Dosya -> Proje Yapısı'na gidin. Proje sekmesine gidin ve Proje SDK'sının 8 (veya daha yeni) olduğundan emin olun ve Project language levelJava 8 olarak ayarlayın

görüntü açıklamasını buraya girin

Buradaki yapılandırma, herhangi bir nedenle Gradle'ı geçersiz kılıyor gibi görünüyor, bu nedenle değiştirmek işe yaramalı


Benim istihbaratımda 8!
— alisabzevari

Önbellekleri geçersiz kılmayı ve yeniden başlatmayı deneyin
— Zoe

İşe yaramadı. Eski intellij ile oluşturulmuş bir projem var (güncel 2017.3.4). Eskisi çalışıyor. İki projenin .idea klasörlerini birbiriyle karşılaştırıyorum. Mantıklı geliyor?
— alisabzevari

2
Bir maven projesinde de aynı hatayı yaşadım. Özellikler bölümüne <kotlin.compiler.jvmTarget> 1.8 </kotlin.compiler.jvmTarget> eklenerek çözüldü. Daha fazla bilgi için youtrack.jetbrains.com/issue/KT-17492'ye bir göz atın
— Paolo

"Proje dil seviyesi" ayarı, Java kaynak kodunun IDE'de nasıl vurgulandığını kontrol eder. Kotlin derlemesine herhangi bir etkisi yoktur.
— yole

1

Bu, altındaki proje ayarlarında da ayarlanır Project Settings > Modules > Kotlin. Bu benim özel sorunumdu ... tam anlamıyla denediğim son şeydi.


0

Benim durumumda, yorumda verilenler dahil olmak üzere tüm @ alisabzevari seçeneklerini denedim, ancak işe yaramadı,

benim hatam java dosyasını src/<sourcset_name>kotlin/klasöre ekledim , daha sonra java dosyasını kotlin dosyasına çevirdim. ve Voila! İşe yarıyor.

Birine yardımcı olabilir.

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.