在Gradle项目中混用Java和Kotlin,Kotlin无法找到Java类

正如标题所说,我试图在一个项目中混合使用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项目来完成这项工作。 我创建了一个包含打印hello world的方法的测试java类。 然后我创建了一个测试kotlin类,它创建了java类的一个新对象,并调用java类的方法来打印hello world。

这解决了我上面的问题,现在我可以从java的kotlin和kotlin调用java类,但是现在它运行时会出现错误。

在这里输入图像描述

 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'] }