Jetpack Compose Kotlin桌面项目Jar打包失败,求生成exe方法
解决Jetpack Compose桌面项目打包Jar运行失败及生成exe的方案
问题分析
错误核心是Skiko本地依赖缺失:Compose Desktop依赖JetBrains的Skia绑定库Skiko,直接打包Jar时,Windows平台所需的skiko-windows-x64.dll及校验文件未被正确纳入Jar包,导致运行时无法加载本地库。而IDE直接运行Main类时会自动处理本地依赖路径,因此可正常启动。
解决步骤
1. 修复Jar打包问题(确保Jar可正常运行)
在项目build.gradle.kts中,针对Compose启动器的Jar任务添加本地依赖打包配置:
tasks.withType<Jar> { if (name == "composeJar") { // 匹配你的Compose启动器Jar任务名 from(configurations.runtimeClasspath.get().filter { it.name.endsWith(".dll") || it.name.endsWith(".so") || it.name.endsWith(".dylib") }.map { zipTree(it) }) duplicatesStrategy = DuplicatesStrategy.EXCLUDE } }
更推荐使用Compose官方application插件替代手动Jar配置:
plugins { kotlin("jvm") id("org.jetbrains.compose") version "你的Compose版本" application } application { mainClass.set("你的Compose启动器Main类全路径") } compose.desktop { application { mainClass = "你的Compose启动器Main类全路径" nativeDistributions { targetFormats(TargetFormat.Msi) // 指定Windows安装包格式 packageName = "BloodWebPumper" packageVersion = "1.1" } } }
执行gradlew.bat composeDesktopDistribute(Windows环境),生成的带依赖Jar会在build/compose/binaries目录下。
2. 直接生成exe文件(推荐方案)
通过Compose官方的nativeDistributions配置可直接生成Windows exe安装包:
- 确保
build.gradle.kts中nativeDistributions已指定TargetFormat.Msi。 - 执行
gradlew.bat composeDesktopBuild,完成后在build/compose/binaries/native目录下获取MSI安装包,安装后即可得到可执行exe文件。 - 如需单文件exe,添加以下配置:
nativeDistributions { windows { exe { isSingleFile = true // 需JDK 16+支持 } } }
3. 手动处理本地依赖(临时方案)
若暂不修改Gradle配置,可手动复制依赖文件:
- 找到项目依赖中的
skiko-windows-x64.jar,解压后取出skiko-windows-x64.dll和skiko-windows-x64.dll.sha256。 - 将两个文件放到Jar所在目录,再执行
java -jar app-1.1-COMPOSE.jar即可运行。
验证
运行生成的Jar或exe,确认无Skiko加载错误、功能正常即可。
内容的提问来源于stack exchange,提问作者Aleksey Parokq
相关产品推荐
相关产品推荐

