正如标题所说,我正在尝试将Java和Kotlin混合在一个项目中。这里有一个很好的例子。 mixed-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。
这解决了我上面遇到的问题,现在我可以从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
答案 0 :(得分:7)
你应该像这样覆盖sourceSets
sourceSets {
main.java.srcDirs = []
main.kotlin.srcDirs = ['src/main/java', 'src/main/kotlin']
main.resources.srcDirs = ['src/main/resources']
}
答案 1 :(得分:2)
我遇到了类似的问题,我的Java代码与kotlin代码位于同一源目录中
我的解决方案是在build.gradle.kts
中添加此配置:
configure<SourceSetContainer> {
named("main") {
java.srcDir("src/main/kotlin")
}
}