Saya memiliki proyek gradle paling sederhana yang dikonfigurasi menggunakan intellij untuk kotlin 1.2.10. Ini file build.gradle saya:
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"
}
Dan saya memiliki antarmuka java yang sederhana:
public interface MyMath {
static int myAbs(int input) {
return Math.abs(input);
}
}
Ketika saya mengimpor antarmuka ini dan mencoba memanggil myAbs
metode itu gagal dengan kesalahan ini:
Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
Saya telah membuat aplikasi intellij kotlin dan berfungsi dengan benar. Apakah ini bug di plugin gradle Kotlin baru?
gradle
intellij-idea
kotlin
alisabzevari.dll
sumber
sumber
Jawaban:
Saya rasa ini bisa bermanfaat bagi mereka yang menggunakan Android Studio 3.2 di Mac.
Untuk mengubah versi JVM Target Compiler Kotlin Anda harus pergi ke Android Studio -> Preferences -> Kotlin Compiler dan kemudian mengubah versi Target JVM yang dipilih dari menu dropdown.
Bagaimanapun, saya masih mendapatkan kesalahan berikut
TERPECAHKAN
Menambahkan yang berikut ke build.gradle saya memecahkan masalah:
android { kotlinOptions { jvmTarget = '1.8' } }
Tentang ini dan opsi konfigurasi Gradle lainnya: https://kotlinlang.org/docs/reference/using-gradle.html
Dengan Kotlin Gradle DSL:
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions (kotlinOptions as KotlinJvmOptions).apply { jvmTarget = JavaVersion.VERSION_1_8.toString() }
sumber
app
gradle btw.Ternyata itu adalah konfigurasi compiler kotlin saya di pengaturan intellij. Dalam
Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler
pengaturan yang disebutTarget JVM version
harus diatur ke 1,8.sumber
Settings -> Other Settings -> Kotlin Compiler -> Target JVM Version
Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
Other Settings
milik saya!Project Structure -> Facets -> Kotling -> Target Platform
Harap periksa apakah Anda memiliki tiga hal berikut yang ditetapkan dalam gagasan:
kotlinOptions { jvmTarget = '1.8' }
Periksa preferensi Ide yang relevan
Periksa Aspek proyek
sumber
Ada properti gradle yang digunakan oleh plugin Kotlin yang dapat digunakan. Saat Anda menambahkan
kotlin.setJvmTargetFromAndroidCompileOptions = true
ke
gradle.properties
file Anda . Jika Anda memiliki konfigurasi ini di filebuild.config
android{ compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } }
masalah harus diselesaikan.
sumber
sourceCompatibility
&targetCompatibility
konfigurasikan tetapi menambahkan masalah tersebut telahkotlin.setJvmTargetFromAndroidCompileOptions = true
memecahkan masalah bagi saya// Cukup tambahkan kode di bawah ini di gradle Build Anda (Module: app)
compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } }
sumber
Tidak begitu yakin mengapa ini berhasil, tetapi Anda dapat mencoba mengubah pengaturan di Ide itu sendiri. Karena Gradle dari command line berfungsi, tetapi tidak saat membuat dari IntelliJ ini mungkin adalah root.
Buka File -> Struktur Proyek. Buka tab Project dan pastikan Project SDK adalah 8 (atau lebih baru) dan setel
Project language level
ke Java 8Konfigurasi di sana tampaknya mengganti Gradle karena beberapa alasan, jadi mengubahnya akan berhasil
sumber
Ini juga diatur dalam pengaturan proyek, di bawah
Project Settings > Modules > Kotlin
. Ini adalah masalah khusus saya ... secara harfiah hal terakhir yang saya coba.sumber
Ini berhasil untuk saya di Gradle dengan Kotlin DSL:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile val compileKotlin: KotlinCompile by tasks compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
sumber
Dalam kasus saya, saya mencoba semua opsi @alisabzevari termasuk diberikan dalam komentar, tetapi tidak berhasil,
kesalahan saya saya menambahkan file java juga di
src/<sourcset_name>kotlin/
folder, kemudian saya mengkonversi file java ke file kotlin. dan Voila! Berhasil.Mungkin itu akan membantu seseorang.
sumber