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

Ktor胖JAR包缺失Jetty HttpConnection类问题求助

Ktor胖JAR运行时Jetty类缺失问题排查与解决

使用Ktor官方插件构建胖JAR后,运行./gradlew runFatJar启动应用,虽日志显示INFO Application - Responding at http://0.0.0.0:8080,但请求时触发以下错误:

WARN o.eclipse.jetty.io.ManagedSelector - java.lang.ExceptionInInitializerError
WARN o.eclipse.jetty.io.ManagedSelector - java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.jetty.server.HttpConnection

推测核心原因是胖JAR中缺失Jetty相关依赖类,可通过以下步骤解决:

  • 检查并补全依赖配置
    确保build.gradle.kts(或build.gradle)中正确引入Jetty服务器依赖,且未意外排除相关模块:

    implementation("io.ktor:ktor-server-jetty-jvm:$ktor_version")
    

    替换$ktor_version为你实际使用的Ktor版本号。

  • 调整FatJar打包策略
    若官方插件打包不全,可自定义Jar任务确保所有传递依赖被包含:

    tasks.withType<Jar> {
        duplicatesStrategy = DuplicatesStrategy.EXCLUDE
        from(sourceSets.main.get().output)
        dependsOn(configurations.runtimeClasspath)
        from({
            configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
        })
        manifest {
            attributes["Main-Class"] = "your.application.main.class" // 替换为你的主类全路径
        }
    }
    
  • 清理缓存后重新构建
    执行以下命令清理旧缓存并重新生成胖JAR,避免缓存导致的依赖遗漏:

    ./gradlew clean buildFatJar
    
  • 验证胖JAR内容
    使用jar tf命令检查目标类是否存在:

    jar tf build/libs/your-app-name-all.jar | grep "HttpConnection"
    

    若无输出,说明依赖未被正确打包,需重新检查依赖配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:42:32