簡體   English   中英

Gradle項目混合Java和Kotlin,Kotlin找不到Java類

[英]Mixing Java And Kotlin In Gradle Project, Kotlin Cannot Find Java Class

正如標題所說,我試圖在一個項目中混合使用 Java 和 Kotlin。 這里有一個很好的例子。 混合 java-kotlin-hello-world 除了 kotlin 找不到我在 src/main/java/somepackage/SomeClass.java 中找到的任何 Java 類之外,一切都正常工作

造成這種情況的原因是什么?

這是我得到的錯誤。 在此處輸入圖片說明

當我嘗試編輯我的 build.gradle 時,它​​顯示我沒有正確拼寫 kotlin 並在插件上給我錯誤,但我正在從 kotlins 網站復制和粘貼。 在此處輸入圖片說明

我的 build.gradle 看起來像這樣

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'

}

而不是開始嘗試在更大的項目上進行這項工作。 我試圖通過創建一個新的 gradle 項目來完成這項工作。 我創建了一個測試 java 類,其中包含一個打印 hello world 的方法。 然后我創建了一個測試 kotlin 類,它創建了一個 java 類的新對象,並從 java 類調用該方法來打印 hello world。

這解決了我上面的問題,現在我可以從 kotlin 調用 java 類,從 java 調用 kotlin 但現在它在運行時給我錯誤。

在此處輸入圖片說明

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

你應該像這樣覆蓋 sourceSets

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

我有一個類似的問題,我的 java 代碼與 kotlin 代碼在同一個源目錄中

我的解決方案是在build.gradle.kts添加此配置:

configure<SourceSetContainer> {
    named("main") {
        java.srcDir("src/main/kotlin")
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM