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

Kotlin Compose Desktop打包MSI后运行exe提示“Failed to launch JVM”求助

Kotlin Compose Desktop MSI安装包运行提示"Failed to launch JVM"的解决办法

针对你遇到的问题,以下是几个可尝试的解决方案:

  • 补充必要JVM模块并确保配置生效
    虽然你已添加modules("java.sql"),但H2数据库可能还依赖其他JDK模块(比如java.naming用于JNDI、java.desktop用于部分系统交互)。建议在全局nativeDistributions和Windows专属配置中都明确添加这些模块,避免打包时遗漏:

    nativeDistributions {
        // ...其他配置
        modules("java.sql", "java.naming", "java.desktop")
        
        windows {
            // ...其他配置
            modules("java.sql", "java.naming", "java.desktop")
        }
    }
    
  • 关闭JRE最小化裁剪
    Compose Desktop默认打包最小化JRE,可能意外移除H2所需依赖。在release构建类型中禁用JRE最小化:

    buildTypes.release {
        jre {
            isMinimal.set(false)
            // 可选:指定JRE版本和厂商,提升兼容性
            jreVersion = "17"
            jreVendor = "adoptium"
        }
    }
    
  • 查看日志定位具体错误

    1. 执行打包时查看详细日志:./gradlew packageMsi --info,搜索是否有模块缺失或依赖打包失败的警告。
    2. 安装MSI后,到程序安装目录(默认C:\Program Files\RepeaterNow)查找日志文件,查看JVM启动失败的具体原因(比如找不到某个类或模块)。
  • 清理缓存后重新打包
    执行./gradlew clean packageMsi清理旧构建产物,避免缓存导致的配置不生效问题。

  • 修正资源文件路径
    脚本中资源路径用了反斜杠\,建议换成跨平台的正斜杠/,避免Windows打包时路径解析异常:

    windows {
        iconFile.set(project.file("src/main/resources/icon.ico"))
    }
    

整合以上建议后的完整Gradle脚本示例:

import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.9.21"
    id("org.jetbrains.compose") version "1.5.11"
}

group = "org.makariyp"
version = "1.0"

repositories {
    google()
    mavenCentral()
    maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}

dependencies {
    testImplementation("org.jetbrains.kotlin:kotlin-test:1.8.10")
    implementation(compose.desktop.currentOs)
    implementation("com.h2database:h2:2.2.224")
}

tasks.test {
    useJUnitPlatform()
}

tasks.withType<KotlinCompile>() {
    kotlinOptions.jvmTarget = "17"
    kotlinOptions.freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn"
}

compose.desktop {
    application {
        mainClass = "org.makariyp.MainKt"
        nativeDistributions {
            targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
            packageName = "RepeaterNow"
            packageVersion = "1.0.0"
            modules("java.sql", "java.naming", "java.desktop")
            
            buildTypes.release {
                jre {
                    isMinimal.set(false)
                    jreVersion = "17"
                    jreVendor = "adoptium"
                }
                proguard {
                    isEnabled.set(false)
                }
            }

            macOS {
                iconFile.set(project.file("src/main/resources/icon.icns"))
            }
            windows {
                iconFile.set(project.file("src/main/resources/icon.ico"))
                modules("java.sql", "java.naming", "java.desktop")
            }
            linux {
                iconFile.set(project.file("src/main/resources/icon.png"))
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:05:32