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
相关产品推荐
相关产品推荐

