繁体   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