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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:45:11