Ich habe das einfachste Gradle-Projekt mit Intellij für Kotlin 1.2.10 konfiguriert. Hier ist meine build.gradle-Datei:
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"
}
Und ich habe eine einfache Java-Oberfläche:
public interface MyMath {
static int myAbs(int input) {
return Math.abs(input);
}
}
Wenn ich diese Schnittstelle importiere und versuche, die myAbs
Methode aufzurufen , schlägt dies mit folgendem Fehler fehl:
Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
Ich habe eine Intellij Kotlin App erstellt und sie hat korrekt funktioniert. Ist es ein Fehler im neuen Kotlin Gradle Plugin?
gradle
intellij-idea
kotlin
alisabzevari
quelle
quelle
Antworten:
Ich denke, dies könnte für diejenigen hilfreich sein, die Android Studio 3.2 auf einem Mac verwenden.
Um die Kotlin Compiler Target JVM-Version zu ändern, gehen Sie zu Android Studio -> Einstellungen -> Kotlin Compiler und ändern Sie dann die Target JVM-Version, indem Sie aus der Dropdown-Liste auswählen.
Wie auch immer, ich erhalte immer noch den folgenden Fehler
Gelöst
Das Hinzufügen von Folgendem zu meinem build.gradle löste das Problem:
Informationen zu dieser und anderen Gradle-Konfigurationsoptionen: https://kotlinlang.org/docs/reference/using-gradle.html
Mit Kotlin Gradle DSL:
quelle
app
übrigens gradle.Es stellte sich heraus, dass es sich um meine Kotlin-Compiler-Konfiguration in den Intellij-Einstellungen handelte. In
Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler
einer EinstellungTarget JVM version
sollte aufgerufen auf 1.8 gesetzt worden sein.quelle
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
in meinem!Project Structure -> Facets -> Kotling -> Target Platform
Bitte überprüfen Sie, ob Sie die folgenden drei Dinge in der Idee haben:
Überprüfen Sie die relevanten Ideeneinstellungen
Überprüfen Sie die Projektfacetten
quelle
Es gibt eine Gradle-Eigenschaft, die vom Kotlin-Plugin verwendet wird und verwendet werden kann. Wenn Sie hinzufügen
zu Ihrer
gradle.properties
Datei. Wenn Sie diese Konfiguration auf Ihrem habenbuild.config
Problem sollte gelöst werden.
quelle
sourceCompatibility
&targetCompatibility
konfiguriert, aber das Hinzufügenkotlin.setJvmTargetFromAndroidCompileOptions = true
löste das Problem für michIch bin mir nicht ganz sicher, warum dies funktioniert, aber Sie können versuchen, die Einstellung in der Idee selbst zu ändern. Da Gradle über die Befehlszeile funktioniert, aber nicht beim Erstellen aus IntelliJ, ist dies wahrscheinlich die Wurzel.
Gehen Sie zu Datei -> Projektstruktur. Wechseln Sie zur Registerkarte Projekt, stellen Sie sicher, dass Project SDK 8 (oder neuer) ist, und setzen Sie
Project language level
Java 8Die Konfiguration dort scheint Gradle aus irgendeinem Grund zu überschreiben, daher sollte das Ändern funktionieren
quelle
Dies wird auch in den Projekteinstellungen unter festgelegt
Project Settings > Modules > Kotlin
. Dies war mein spezifisches Problem ... buchstäblich das Letzte, was ich versucht habe.quelle
// Fügen Sie einfach den folgenden Code in Ihren Build-Gradle ein (Modul: App)
quelle
In meinem Fall habe ich alle @ alisabzevari-Optionen ausprobiert, einschließlich der im Kommentar angegebenen, aber es hat nicht funktioniert.
Mein Fehler Ich habe Java-Datei auch im
src/<sourcset_name>kotlin/
Ordner hinzugefügt , später habe ich Java-Datei in Kotlin-Datei konvertiert. und Voila! Es klappt.Vielleicht hilft es jemandem.
quelle
Das hat bei mir in Gradle mit Kotlin DSL funktioniert:
quelle