Wie der Titel sagt, versuche ich Java und Kotlin in einem einzigen Projekt zu mischen. Es gibt ein gutes Beispiel, das hier gefunden wurde. mixed-java-kotlin-hello-world. Alles funktioniert ordnungsgemäß außer Kotlin kann keine meiner Java-Klassen finden, die in src gefunden werden/main/java/somepackage/SomeClass.javaMischen von Java und Kotlin Im Gradle-Projekt kann Kotlin die Java-Klasse nicht finden
Was wäre der Grund dafür?
Dies ist der Fehler, den ich bekomme.
Wenn ich versuche, meine build.gradle zu bearbeiten, zeigt es, dass ich kotlin nicht richtig buchstabiere und mir Fehler auf dem Plugin gebe, aber ich kopiere und kopiere von kotlins website.
Meine build.gradle sieht aus wie dieses
group 'Battle-OS'
version '1.0-SNAPSHOT'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.2-1"
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'kotlin'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.2-1"
testCompile 'junit:junit:4.11'
testCompile "org.jetbrains.kotlin:kotlin-test-junit:1.0.2-1"
compile 'org.slf4j:slf4j-api:1.7.18'
testCompile 'junit:junit:4.12'
// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile group: 'com.google.code.gson', name: 'gson', version: '2.7'
// https://mvnrepository.com/artifact/com.google.guava/guava
compile group: 'com.google.guava', name: 'guava', version: '19.0'
// https://mvnrepository.com/artifact/io.netty/netty-all
compile group: 'io.netty', name: 'netty-all', version: '4.0.37.Final'
// https://mvnrepository.com/artifact/com.moandjiezana.toml/toml4j
compile group: 'com.moandjiezana.toml', name: 'toml4j', version: '0.6.0'
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib
compile group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib', version: '1.0.2-1'
}
Anstatt zu versuchen, Anfahren auf ein größeres Projekt, diese Arbeit zu machen. Ich habe versucht, dies zu schaffen, indem ich ein neues Megaprojekt erstellte. Ich habe eine Test-Java-Klasse erstellt, die eine Methode zum Drucken von Hallo Welt enthält. Dann habe ich eine Test-Kotlin-Klasse erstellt, die ein neues Objekt der Java-Klasse erstellt und die Methode aus der Java-Klasse aufruft, um Hallo Welt zu drucken.
Dies löst das Problem, das ich oben hatte, jetzt kann ich Java-Klassen von Kotlin und Kotlin von Java aufrufen, aber jetzt gibt es mir Fehler beim Ausführen.
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at AKotlinClassKt.main(AKotlinClass.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
außer Kraft setzen, sollten Sie diese Fehlermeldung erhalten Sie, wenn Sie Ihr Projekt mit Kommandozeile gradle Gebäude oder sehen Sie es nur in Eclipse? – Ilya
Soweit ich weiß, ist es nur Eclipse. Ich habe kein Problem damit, IntelliJ zu verwenden, aber ich versuche, dieses Projekt mit Eclipse und IntelliJ zu arbeiten. –
Wie hast du dein Projekt gebaut? Ich habe versucht, Mixed-Java-Kotlin-Hallo-Welt zu bauen und bekam keinen Fehler. Ich importierte das Projekt als "Großansicht", um es zu verdunkeln, fügte dann Kotlin Natur zum Projekt hinzu und erstellte es mit "Gradle Tasks". Nur für den Fall, dass es auf dem ersten Screenshot keine entsprechende Importdeklaration gibt, bitte versuchen Sie es hinzuzufügen und das Projekt erneut zu erstellen. –