2016-06-30 12 views
4

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. enter image description here

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.

enter image description here

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 
+1

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

+0

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. –

+0

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. –

Antwort

2

Sie sourceSets wie diese

sourceSets { 
    main.java.srcDirs = [] 
    main.kotlin.srcDirs = ['src/main/java', 'src/main/kotlin'] 
    main.resources.srcDirs = ['src/main/resources'] 
}