KMM+Desktop Compose编译后运行报java/net/http/HttpClient错误求助
解决KMM + Desktop Compose编译产物运行时
java/net/http/HttpClient错误 明确JDK版本与模块配置
先把Gradle构建脚本里的Desktop模块JDK目标版本和模块依赖明确写死,避免打包时自动适配出问题。在build.gradle.kts的desktop模块下添加:kotlin { jvm("desktop") { compilations.all { kotlinOptions.jvmTarget = "17" // 选你测试过的稳定版本,推荐17 } // 给运行类添加模块依赖 tasks.withType<JavaExec> { jvmArgs("--add-modules", "java.net.http") } // Jar包清单里声明多版本兼容和主类 tasks.withType<Jar> { manifest { attributes["Main-Class"] = "你的主类全路径" attributes["Multi-Release"] = "true" } } } }同时在项目根目录的
gradle.properties里指定Gradle用的JDK:org.gradle.java.home=/你的JDK17安装路径 kotlin.jvm.target=17检查依赖与模块冲突
运行./gradlew desktop:dependencies拉取依赖树,看看有没有第三方库和JDK自带的java.net.http模块冲突,或者有没有依赖没正确引入这个模块。如果用了其他HTTP库,暂时注释掉试试,排查是不是它搞的鬼。修正打包脚本的模块包含
createDistributable打包时可能没把java.net.http模块加进去,得手动配置:// 给启动脚本加JVM参数 tasks.withType<CreateStartScripts> { defaultJvmOpts = listOf("--add-modules", "java.net.http") } // 如果用jlink打包,直接添加模块 tasks.withType<Jlink> { modules.add("java.net.http") }回滚代码定位问题根源
既然之前能正常运行,就从最近新增的代码开始逐步回滚——尤其是涉及HTTP请求、新依赖、JVM配置修改的部分。每次回滚后跑一遍createDistributable再运行产物,找到触发问题的代码块再针对性改。对齐Gradle和IDE的JDK环境
终端跑./gradlew --version看看Gradle用的JDK版本,和IntelliJ里Project Structure配置的JDK对比,确保两者完全一致,别一个用17一个用21,环境不一致很容易出这种诡异问题。
内容的提问来源于stack exchange,提问作者oberon
相关产品推荐
相关产品推荐

