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.