最近用kotlin compose desktop搓了个PC端小工具,发现个怪事,必须用IDEA才能运行,打包成EXE就点不开,一点反应都没有,也没有报错。
最后发现是因为mainClass
的配置有问题导致的。
在最外层的build.gradle.kts
里有这么一段:
ini
compose.desktop {
application {
mainClass = "MainKt" <----就是它
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Exe, TargetFormat.Deb)
packageName = "ApkManager"
packageVersion = "1.0.0"
}
}
}
这里的mainClass
是主程序文件的名字,后面那个Kt
是后缀(对没错那是后缀)
在项目一开始创建的时候,默认在kotlin
目录下生成了一个Main.kt
文件,所以这里默认就写了mainClass = "MainKt"
,其实就是去掉后缀名的点,然后用驼峰命名。
后来我改过这个Main.kt
文件,给它加了包名,于是运行的时候就找不到了,离谱的是找不到竟然不报错。
解决办法非常简单,在前面加上包名就可以了。
ini
compose.desktop {
application {
mainClass = "com.dubhe.apkmamanger.MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Exe, TargetFormat.Deb)
packageName = "ApkManager"
packageVersion = "1.0.0"
}
}
}
如果文件名有多个点
隔断,前面的点
用下划线替代,最后的点
直接去掉。像这样:
原文件名:main.desktop.kt
ini
compose.desktop {
application {
mainClass = "Main_desktopKt"
}
}
虽然这个参数的名字叫mainClass
,但实际上那个目标文件如果不是Class
,直接把main
函数扔外面也是可以的。但是main
函数是一定要有的。
如果觉得很麻烦建议直接不要动这个主入口文件,new出来长啥样就啥样,逻辑全写另一个类里引用它就好。免得抽风。