You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin项目打JAR包:主类找不到及NoClassDefFoundError问题求助

Kotlin应用打包问题解决方案

1. 解决Manifest无Main-Class属性&Artifact找不到主类问题

  • 确认主类全路径正确:如果Main.kt不在根包下,必须填写完整包名(例如com.yourpackage.MainKt),而非仅MainKt。
  • 修正Gradle的Manifest配置:application.mainClass是Property<String>类型,直接赋值会导致Manifest写入Provider(value=MainKt)而非实际类名,需调用get()获取真实值:
    jar {
        manifest {
            attributes["Main-Class"] = application.mainClass.get()
        }
        // 其他配置保留
    }
    
  • 同步Gradle并重新生成Artifact:在IDEA中执行File → Sync Project with Gradle Files,重新配置Artifact时主类会被正确识别。

2. 解决java.lang.NoClassDefFoundError: kotlinx/coroutines/slf4j/MDCContext错误

该错误是缺少kotlinx-coroutines-slf4j依赖导致的,在dependencies块中添加对应版本依赖(版本需与Kotlin版本匹配,Kotlin 1.5.10对应coroutines 1.5.0):

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.5.0")

3. 优化Gradle打包配置(消除重复&确保Fat Jar构建正确)

你的配置存在重复的compileKotlin设置,且手动构建Fat Jar可能遗漏依赖,建议调整为如下完整配置:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.5.10"
    application
    kotlin("plugin.serialization") version "1.6.10"
}

version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
    maven(url = "https://jitpack.io")
}

val ktor_version: String by project
val coroutines_version = "1.5.0" // 与Kotlin版本匹配

dependencies {
    // Fix HTML issue on some responses
    implementation("org.apache.commons:commons-text:1.10.0")
    // Ktor dependencies
    implementation("io.ktor:ktor-client-auth:$ktor_version")
    implementation("io.ktor:ktor-client-core:$ktor_version")
    implementation("io.ktor:ktor-client-cio:$ktor_version")
    implementation("io.ktor:ktor-client-resources:$ktor_version")
    implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")
    implementation("io.ktor:ktor-client-content-negotiation:$ktor_version")
    implementation("io.ktor:ktor-client-logging:$ktor_version")
    // Logging dependencies
    implementation("ch.qos.logback:logback-classic:1.4.0")
    // 添加缺失的coroutines-slf4j依赖
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:$coroutines_version")
    implementation(kotlin("stdlib-jdk8"))
    // Database
    implementation("mysql:mysql-connector-java:8.0.30")
    implementation("org.ktorm:ktorm-core:3.5.0")
    implementation("org.ktorm:ktorm-support-mysql:3.5.0")
}

application {
    // 替换为你的主类完整包名
    mainClass.set("MainKt")
}

// 统一设置Kotlin编译JVM目标,消除重复配置
tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

tasks.jar {
    manifest {
        attributes["Main-Class"] = application.mainClass.get()
    }
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE

    // 使用runtimeClasspath确保包含所有运行时依赖
    from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
}

验证步骤

  1. 执行./gradlew clean jar构建Fat Jar;
  2. 运行Jar包:java -jar build/libs/你的项目名-1.0-SNAPSHOT.jar;
  3. 若仍有问题,检查主类是否存在、包名是否正确,以及依赖是否全部引入。

内容的提问来源于stack exchange,提问作者Poui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:05:34