Verwendung der Kotlin-Klasse in Java: Symbol kann nicht gefunden werden
Lesezeit: 5 Minuten
Vojtěch
Ich habe diese ähnliche Frage zu Android gefunden, aber ich verwende einfaches Java mit Maven als Build-Tool. Ich denke, es ist besser, eine neue Frage zu stellen.
Ich habe eine Kotlin-Klasse erstellt, auf die ich von der Java-Klasse verweisen möchte MyKotlinClass.class. Der Maven-Build schlägt fehl, während die Kompilierung in IntelliJ Idea gut funktioniert. Ich habe das Kotlin-Plugin bereits zu Maven hinzugefügt:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project app: Compilation failure
[ERROR] MyClassLinkingKotlin.java:[100,40] error: cannot find symbol
Die Zeile/Spalte bezieht sich genau auf das Symbol MyKotlinClass.class. Es wird auch bei folgender Verwendung fehlschlagen:
System.err.println(MyKotlinClass.class)
Bitte zeigen Sie uns MyClassLinkingKotlin.java insbesondere Zeile 100 (ich denke, es ist [line,col])
– Wurflöffel
15. Mai 2017 um 12:56 Uhr
Zur Frage hinzugefügt.
– Vojtěch
15. Mai 2017 um 12:58 Uhr
Mögliches Duplikat von Fehler beim Versuch, eine Kotlin-Klasse aus Java zu instanziieren
– Ilja
15. Mai 2017 um 23:04 Uhr
Ihre Maven-Konfiguration fügt das Kotlin-Compiler-Plugin hinzu, passt die Ausführung des Java-Compiler-Plugins jedoch nicht so an, dass der Java-Compiler nach dem Kotlin-Compiler ausgeführt wird. Daher wird der Java-Compiler vor Kotlin ausgeführt und sieht keine von Kotlin kompilierten Klassen.
Hier ist ein Ausschnitt, der die korrekte Konfiguration für ein gemischtsprachiges Projekt zeigt (entnommen aus die Dokumentation):
Vielen Dank. Leider scheint intellij die pom-Datei nicht korrekt einzurichten, wenn Java und Kotlin zusammen vorhanden sind. Ich musste es manuell tun, indem ich der Dokumentation folgte.
– Ferran Maylinch
22. Januar 2020 um 7:21 Uhr
Wenn Sie Android Studio verwenden und die Kotlin-Plugins bereits über Einstellungen -> Plugins -> Kotlin hinzugefügt haben, kann es sein, dass Sie den Rest von Gradle nicht für die Verwendung von Kotlin eingerichtet haben. Hier ein Ausschnitt aus https://medium.com/@elye.project/setup-kotlin-for-android-studio-1bffdf1362e8:
Schritt 1: Richten Sie das Kotlin-Plugin in Android Studio ein
Android Studio → Einstellungen … → Plugins → Repository durchsuchen → „Kotlin“ in das Suchfeld eingeben → installieren
Schritt 2: Kotlin-Klassenpfad zum Projekt Build.Gradle hinzufügen
buildscript {
ext.kotlin_version = "1.1.1"
ext.supportLibVersion = "25.3.0"
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
Schritt 3: Fügen Sie die Kotlin-Bibliothek hinzu und wenden Sie Kotlin-Plugins in Ihrem Modul Build.gradle an
Ich bin auf denselben Fehler gestoßen, hatte aber das richtige Pom-Setup. Mein Problem war, dass ich gerade eine Java-Klasse mit Intellij in eine Kotlin-Klasse konvertiert hatte, wodurch diese Kotlin-Datei erhalten blieb src/main/java.
Die Lösung für mich war, eine zu erstellen src/main/kotlin und verschiebe meine Kotlin-Klasse dorthin und lasse meine Java-Dateien drin src/main/java. Aber Sie brauchen definitiv das Maven-Setup, das die Antwort von @yole zeigt.
Nur neugierig: Warum das funktioniert, ist, dass nach Kotlin-Dateien verschoben werden src/main/kotlin Sie werden vor Java-Dateien kompiliert? So funktioniert das?
– Michael Vician
6. April 2021 um 8:30 Uhr
Wenn jemand ein einfaches Java-Projekt mit verwendet Gradle Anstatt von Maven ändern Sie dann Ihre Modul-Gradle-Datei wie folgt:
Angenommen, Sie haben folgendes Plugin in Ihrem Modul:
apply plugin: 'java-library'
Wenn Sie ein Kotlin-Plugin haben möchten, fügen Sie das Kotlin-Plugin vor dem Java-Plugin hinzu:
Ihre Konfiguration fügt das Kotlin-Compiler-Plug-in hinzu, passt die Ausführung des Java-Compiler-Plug-ins jedoch nicht so an, dass der Java-Compiler nach dem Kotlin-Compiler ausgeführt wird. Daher wird der Java-Compiler vor Kotlin ausgeführt und sieht keine von Kotlin kompilierten Klassen.
wie von @yole in Antworten erklärt
10550100cookie-checkVerwendung der Kotlin-Klasse in Java: Symbol kann nicht gefunden werdenyes
Bitte zeigen Sie uns
MyClassLinkingKotlin.java
insbesondere Zeile 100 (ich denke, es ist [line,col])– Wurflöffel
15. Mai 2017 um 12:56 Uhr
Zur Frage hinzugefügt.
– Vojtěch
15. Mai 2017 um 12:58 Uhr
Mögliches Duplikat von Fehler beim Versuch, eine Kotlin-Klasse aus Java zu instanziieren
– Ilja
15. Mai 2017 um 23:04 Uhr