我正在使用一项对我来说很新的技术 - Kotlin Compose Desktop 创建一个简单的宠物项目。该项目很原始,类似于 h2(文件中)数据库的 CRUD。所以,现在我的 gradle 任务遇到了问题
packageMsi
。当 msi 文件准备好并且我在 Windows 系统上安装程序时,当我运行 exe 文件时出现错误“无法启动 JVM”。
这是我的 gradle 脚本:
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import kotlin.script.experimental.jvm.util.classpathFromClass
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")
macOS {
iconFile.set(project.file("src\\main\\resources\\icon.icns"))
}
windows {
iconFile.set(project.file("src\\main\\resources\\icon.ico"))
}
linux {
iconFile.set(project.file("src\\main\\resources\\icon.png"))
}
buildTypes.release.proguard {
isEnabled.set(false)
}
}
}
}
首先我在
runDistributable
任务中遇到了同样的问题,但我通过在 gradle 构建文件中添加 modules("java.sql")
解决了这个问题,现在 gradle 执行了此任务并且应用程序成功运行。但我仍然对packageMsi
有疑问。我该如何解决这个问题?
在我的建议中,问题与wix安装程序中不存在的依赖关系以及最终在exe文件中不存在的依赖关系有关。但第三天我找不到解决办法。我也尝试过不同版本的 kotlin、gradle 和 h2。
我也遇到这个问题了,解决了吗?