一、背景
- 项目地址
- 开发工具:IDEA 社区版 2022.2.3
- 添加插件
- IDEA 中直接运行用 JDK11 即可,若要打包 msi 或者 exe 安装包则需要 JDK17
二、build.gradle.kts
kotlin {
jvm {
compilations.all {
kotlinOptions.jvmTarget = "11"
}
withJava()
}
sourceSets {
val jvmMain by getting {
dependencies {
implementation(compose.desktop.currentOs)
// implementation("com.google.code.gson:gson:2.8.5")
implementation("com.squareup.retrofit2:retrofit:2.6.0")
implementation("com.squareup.retrofit2:converter-gson:2.6.0")
}
}
val jvmTest by getting
}
}
- 拷贝 wix311.zip,使用
gradlew packageMsi
命令打包安装文件时需要用到该文件,需要从 github 下载,可以手动下载后保存到工程根目录。
// 避免每次 clean 后都需要再次下载, 这里直接在根目录放置下载好的文件, 用 task 进行拷贝
task("copyWix311", Copy::class) {
from("wix311.zip")
into("build/wixToolset")
}
// 需要在 afterEvaluate 中处理, 否则报找不到 packageMsi 这个 task 的错误
afterEvaluate {
tasks.getByName("packageMsi").dependsOn("copyWix311")
tasks.getByName("downloadWix").enabled = false
if (file("build/wixToolset/unpacked").exists()) {
tasks.getByName("unzipWix").enabled = false
}
}
- 添加模块,比如 Gson 中使用到了
java.sql
包下的相关类,如 java.sql.Time
,但是打包 msi 安装文件时会对标准 java 运行时进行裁剪,默认情况下不会包含 java.sql
模块,这里可以手动添加。
- 修改
mainClass
,如果 MainKt
移动到了某个包下,如 com.xxx.MainKt
,这里需要同步修改,否则打包成安装文件安装完成后会运行失败,提示找不到类 MainKt
。(在 Git bash 中运行 ./xxx.exe
可以看到提示)
compose.desktop {
application {
mainClass = "com.xxx.MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb, TargetFormat.Exe)
packageName = "Xxx"
packageVersion = "1.0.0"
modules("java.sql")
}
}
}
通过阅读源码发现可以添加模块
compose.desktop {
application {
...
nativeDistributions {
...
windows {
iconFile.set(file("WIFI.ico"))
}
}
}
}
示例
安装后运行截图
问题
网友评论