首页 > 解决方案 > 使用 gradle 混合 Java 和 Kotlin - NoClassDefFoundError

问题描述

我正在尝试编译一个 gradle projet,我在 src/main/java 和 src/main/kotlin 下混合了 kotlin 和 java 文件。

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version "1.3.41"
}


ext {
    kotlinVersion = '1.3.41'
}


group 'github.littlechisels'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

test {
    useJUnitPlatform()
}

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

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
    implementation "org.jetbrains.kotlin:kotlin-test:$kotlinVersion"
  ...
    testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion"
    testImplementation("org.junit.jupiter:junit-jupiter:5.5.0")
    testRuntime ('org.junit.jupiter:junit-jupiter-engine:5.5.0')
    testImplementation ('org.junit.jupiter:junit-jupiter-api:5.5.0')
    test.useJUnitPlatform()
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

但是 build\classes\java\main 是空的,而 kotlin one 不是

项目使用 IntelliJ 和 Gradle 构建良好,但是当我运行 littlechisels.main.Converter 时,我得到一个关于 java 类的 NoClassDefFoundError :

Exception in thread "main" java.lang.NoClassDefFoundError: littlechisels/main/WorldSave
    at littlechisels.main.Converter.main(Converter.kt:20)
Caused by: java.lang.ClassNotFoundException: littlechisels.main.WorldSave
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 1 more 

可以在这里找到回购 https://github.com/vinz243/littlechisels

在此处输入图像描述

标签: javagradlekotlin

解决方案


推荐阅读