Mam najprostszy projekt gradle skonfigurowany przy użyciu intellij dla kotlin 1.2.10. Oto mój plik build.gradle:
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"
}
Mam prosty interfejs java:
public interface MyMath {
static int myAbs(int input) {
return Math.abs(input);
}
}
Kiedy importuję ten interfejs i próbuję wywołać myAbs
metodę, kończy się to błędem:
Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
Stworzyłem aplikację intellij kotlin i działała poprawnie. Czy to błąd w nowej wtyczce Kotlin Gradle?
gradle
intellij-idea
kotlin
alisabzevari
źródło
źródło
Odpowiedzi:
Myślę, że może to być pomocne dla osób używających Android Studio 3.2 na Macu.
Aby zmienić docelową wersję JVM kompilatora Kotlin, należy przejść do Android Studio -> Preferencje -> Kompilator Kotlin, a następnie zmienić docelową wersję JVM, wybierając z menu rozwijanego.
W każdym razie nadal otrzymuję następujący błąd
ROZWIĄZANY
Dodanie następującego pliku do pliku build.gradle rozwiązało problem:
android { kotlinOptions { jvmTarget = '1.8' } }
Informacje o tej i innych opcjach konfiguracji Gradle: https://kotlinlang.org/docs/reference/using-gradle.html
Z Kotlin Gradle DSL:
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions (kotlinOptions as KotlinJvmOptions).apply { jvmTarget = JavaVersion.VERSION_1_8.toString() }
źródło
app
okazji, to jest gradle.Okazało się, że to moja konfiguracja kompilatora kotlin w ustawieniach intellij. W
Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler
wywołanym ustawieniuTarget JVM version
powinien być ustawiony na 1,8.źródło
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
w swoim!Project Structure -> Facets -> Kotling -> Target Platform
Sprawdź, czy masz pomysł na następujące trzy rzeczy:
kotlinOptions { jvmTarget = '1.8' }
Sprawdź odpowiednie preferencje pomysłów
Sprawdź aspekty projektu
źródło
Istnieje właściwość gradle używana przez wtyczkę Kotlin, której można użyć. Kiedy dodasz
kotlin.setJvmTargetFromAndroidCompileOptions = true
do twojego
gradle.properties
pliku. Gdy masz taką konfigurację na swoimbuild.config
android{ compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } }
problem powinien zostać rozwiązany.
źródło
sourceCompatibility
itargetCompatibility
skonfigurowany ale dodaniekotlin.setJvmTargetFromAndroidCompileOptions = true
rozwiązał problem dla mnie// Po prostu dodaj poniższy kod w swoim Build gradle (Module: app)
compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } }
źródło
Nie do końca wiem, dlaczego to działa, ale możesz spróbować zmienić ustawienie w samym Pomyśle. Ponieważ Gradle z wiersza poleceń działa, ale nie podczas budowania z IntelliJ, prawdopodobnie jest to katalog główny.
Przejdź do Plik -> Struktura projektu. Przejdź do zakładki Project i upewnij się, że Project SDK ma wersję 8 (lub nowszą) i ustaw
Project language level
Java 8Konfiguracja z jakiegoś powodu zdaje się zastępować Gradle, więc jej zmiana powinna działać
źródło
Można to również ustawić w ustawieniach projektu w sekcji
Project Settings > Modules > Kotlin
. To był mój konkretny problem ... dosłownie ostatnia rzecz, jakiej próbowałem.źródło
To zadziałało dla mnie w Gradle z Kotlin DSL:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile val compileKotlin: KotlinCompile by tasks compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
źródło
W moim przypadku wypróbowałem wszystkie opcje @alisabzevari, w tym podane w komentarzu, ale to nie zadziałało,
mój błąd dodałem plik java również w
src/<sourcset_name>kotlin/
folderze, później przekonwertowałem plik java na plik kotlin. i Voila! To działa.Może to komuś pomoże.
źródło