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

如何在IntelliJ中为Kotlin Multiplatform Compose项目生成免JRE单.exe文件?

可以生成无JRE依赖的独立.exe文件,具体操作步骤如下

1. 配置桌面模块的Gradle任务

在KMM项目的desktop模块(桌面端代码所在模块)的build.gradle.kts中,添加基于JDK自带jpackage工具的打包任务,同时通过jlink生成裁剪后的轻量JRE嵌入到exe中:

import org.gradle.jvm.tasks.JLink
import org.gradle.jvm.tasks.JPackageTask

// 确保JavaExec任务配置正确
tasks.withType<JavaExec> {
    jvmArgs += "-Djava.awt.headless=false"
}

// 注册jpackage打包任务
val jpackage by tasks.registering(JPackageTask::class) {
    // 依赖先生成包含所有依赖的uber jar
    dependsOn(tasks.named("packageUberJarForCurrentOS"))
    val uberJar = tasks.named("packageUberJarForCurrentOS").get().outputs.files.singleFile
    val jdkHome = System.getProperty("java.home")
    val outputDir = file("${project.buildDir}/standalone-exe")

    input = file(uberJar.parent)
    destination = outputDir
    mainJar = uberJar.name
    // 替换为你的项目主类全路径(Kotlin主类通常带Kt后缀,比如com.example.MainKt)
    mainClass = "your.full.package.name.MainKt"

    // 生成裁剪后的轻量JRE(减小最终exe体积)
    val jlinkDir = file("${project.buildDir}/jlink-jre")
    val jlink by tasks.registering(JLink::class) {
        this.jdkHome = jdkHome
        outputDir = jlinkDir
        // 裁剪参数:移除调试信息、文档,启用压缩
        options = listOf("--strip-debug", "--no-man-pages", "--no-header-files", "--compress=2")
        // 按需添加项目依赖的JDK模块,Compose Desktop至少需要java.desktop
        modules = listOf("java.base", "java.desktop", "java.logging", "java.xml")
    }
    runtimeImage = jlinkDir

    // Windows专属配置:生成单文件exe
    winOptions {
        // 带控制台输出设为true,纯GUI应用设为false
        console = true
        // 可选:设置exe图标,替换为你的ico文件路径
        icon = file("src/main/resources/app-icon.ico")
        // 启用单文件模式(需JDK17+)
        addArgs("--type", "exe", "--win-single-file")
    }
}

2. 执行打包任务

在终端中运行对应命令:

  • Windows系统:gradlew.bat jpackage
  • macOS/Linux系统:./gradlew jpackage

任务执行完成后,生成的独立exe文件会存放在desktop/build/standalone-exe目录下。

3. 关键注意事项

  • 必须使用JDK17及以上版本:--win-single-file单文件打包特性是JDK17才引入的。
  • 主类路径要准确:可通过查看packageUberJarForCurrentOS任务输出的jar包,确认MANIFEST.MF中的主类名称。
  • 按需补充JDK模块:如果打包时出现类找不到的报错,需在jlink的modules列表中添加对应的JDK模块。
  • 测试兼容性:将生成的exe复制到未安装JRE的Windows电脑上,双击验证是否能正常启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:24:57