java jfilechooser Compose Desktop 初体验之打包
java jfilechooser Compose Desktop 初体验之打包
从 0 到 1 搞一个 版本的玩天气之打包
大家好,前两篇文章大概介绍了下上手 和自定义绘制时遇到的一些问题,项目的最终实现效果如下:

视频
代码写好了,该弄的动画也弄了,该请求的网络数据也请求了,该实现的效果也都实现好了,但是!!!咱们得打包出来啊!不打包出来别人如何使用呢?难道说别人想用你开发的桌面应用,结果你给他说你先下载一个 Idae ,然后下载下我的源码,之后把环境配置好,最后运行就可以了!如果下次再想用的时候再运行一次就好了!
这说的是人话嘛,肯定不能这样,所以一定要打包!由于 不止可以运行在 Mac 中java jfilechooser,还可以运行在 和 Linux 中,所以需要打多个包。那使用 应该如何打包呢?且听我慢慢道来!
基本用法
插件中的基本配置单元是一个 ,是什么呢?在第一篇文章中也提到了java jfilechooser,就是在 build..kts 文件中的代码,咱们再来看下:
compose.desktop {
application {
mainClass = "MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "Demo"
packageVersion = "1.0.0"
}
}
}
一个 定义了一组最终二进制文件的共享配置。换句话说, DSL 允许将一堆文件连同 JDK 分发包打包成一组各种格式(.dmg、.deb、.msi、.exe等)的压缩二进制安装程序。
该插件创建以下任务:
光这么说其实有点懵,来一张图大家就明白我说的是什么了!

是不是有点恍然大明白的感觉!直接点击 IDEA 右侧边栏的 ,就会出现这个侧边栏,然后点击 Task 中的 就会出现上面描述的那些任务。
打包配置
打包有很多的配置项,下面来分别看下。
配置包含的 JDK 模块
插件使用 jlink 通过仅包含必要的 JDK 模块来最小化可分发的大小。
此时, 插件不会自动确定必要的 JDK 模块。未能提供必要的模块不会导致编译问题,但会导致在运行时出现 on 的错误。
如果在运行打包的应用程序或任务时遇到 on ,可以使用DSL 方法 来配置包含额外的 JDK 模块,需要使用 来配置。
可以通过手动或运行 任务来确定哪些模块是必需的。 使用 jdeps 静态分析工具来确定可能缺少的模块。
如果安装包的大小不重要的话,可以使用 属性简单地包括所有运行时模块作为替代。
compose.desktop {
application {
nativeDistributions {
modules("java.sql")
// alternatively: includeAllModules = true
}
}
}
这块在我打包的时候搜了好久!最后在 Issue 中找到了解决方案!
可用格式
以下格式可用于支持的操作系统:
指定包版本
由于可以打多种不同的包,也有可能需要区分不同的版本,所以可以指定包的版本。如何指定的呢?来看代码:
compose.desktop {
application {
nativeDistributions {
packageVersion = "1.0.0"
linux {
packageVersion = "1.0.0"
debPackageVersion = "1.0.0"
rpmPackageVersion = "1.0.0"
}
macOS {
packageVersion = "1.1.0"
dmgPackageVersion = "1.1.0"
pkgPackageVersion = "1.1.0"
packageBuildVersion = "1.1.0"
dmgPackageBuildVersion = "1.1.0"
pkgPackageBuildVersion = "1.1.0"
}
windows {
packageVersion = "1.2.0"
msiPackageVersion = "1.2.0"
exePackageVersion = "1.2.0"
}
}
}
}
必须为本机分发包指定包版本,还可以使用以下 DSL 属性(按优先级降序排列):
对于 macOS,还可以使用以下 DSL 属性指定构建版本(按优先级降序排列):
需要注意的是java jfilechooser,版本必须遵循以下规则:
自定义 JDK 版本
由于该插件使用,所以最低得使用 JDK 15。
compose.desktop {
application {
javaHome = System.getenv("JDK_15")
}
}
自定义输出目录
默认的打包路径在
/build///main/app 中,如果想修改下打包路径的话,需要修改下配置:
compose.desktop {
application {
nativeDistributions {
outputBaseDir.set(project.buildDir.resolve("customOutputDir"))
}
}
}
自定义基本数据
DSL 块中提供以下属性 :
compose.desktop {
application {
nativeDistributions {
packageName = "PlayWeather"
version = "1.1.0"
description = "PlayWeather"
copyright = "© 2022 My Name. All rights reserved."
vendor = "Example vendor"
licenseFile.set(project.file("LICENSE.txt"))
}
}
}
这块大家可以根据需求来定义这些数据,如不需要不写即可。
特定平台选项
需要使用相应的 DSL 块设置特定于平台的选项,使用方法就是上面 maxOS 、 、linux ,不同平台可配置的选项都不太一样!
e — 应用名称; — 显示在菜单栏、“关于”菜单项、停靠栏等中的应用程序名称。 等于默认情况下的名称;, , , 和— 详见相应教程; = true — 为 Apple App Store 构建和签名。至少需要 JDK 17; — Apple App Store 的应用类别。默认值是 .app-. ;.set(File(“”)) — 包含签名时使用的权利的文件路径;ile.set(File(“”)) — 包含在签署 JVM 运行时时使用的权利的文件路径; = “” — 一个特定于 dmg 的包版本(详见参考资料部分); = “” — 特定于 pkg 的包版本(详情请参阅参考资料部分); = “” — 包构建版本(详见参考资料部分);on = “” — 特定于 dmg 的软件包构建版本(详情请参阅参考资料部分);on = “” — 特定于 pkg 的包构建版本; — 链接到别的程序。Linux修改应用图标
这块为什么要单独拿出一大块来说呢?因为这个问题中困扰了我好久。。。所以才。。。。
还记得之前文章中说了 可组合项中可以设定 Icon 么,但当时说的时候专门说了此 Icon 并非应用程序的图标!因为应用程序图标需要以特定于操作系统的格式提供:
看下代码吧:
compose.desktop {
application {
nativeDistributions {
macOS {
iconFile.set(project.file("icon.icns"))
}
windows {
iconFile.set(project.file("icon.ico"))
}
linux {
iconFile.set(project.file("icon.png"))
}
}
}
}
Linux 中的 png 格式的图片我们很常见,但是 Mac 和 中的格式是什么鬼。。。没见过啊!
如果知道这两种文件格式的话大家直接跳过后面的部分即可,这里还需要注意的是这里的文件路径指的是项目根目录。
ICNS 文件什么是 .icns ?
.icns 是苹果的 macOS 操作系统的 App 图标文件的扩展名,大家在 macOS 的 桌面、 访达、Dock 程序坞 等看到应用程序的外观就是由一个内置在此 App 内部的扩展名为.icns的文件实现的。
可以通过鼠标“右键”点击 App – “显示包内容” – 进入 目录 – 进入 目录,然后在目录下可以找到名为 .icns 或其他后缀为 .icns 的一个图标文件。
如何创建 .icns 扩展名的图标文件?
a. 准备一张图片,重命名为 icon.png,其他大小尺寸可以通过终端命令生成;
b. 通过鼠标右键或者命令,创建一个名为 icons. 的文件夹
mkdir icons.iconset
c. 通过”终端“来快速创建各种不同尺寸要求的图片文件
sips -z 512 512 icon.png -o icons.iconset/icon_512x512.png
d. ”终端“中运行下面的命令,就可以获得名为icon.icns的图标文件了
iconutil -c icns icons.iconset -o icon.icns
注意:icon.png 图片文件和 icons. 文件夹要保存在同一级目录下,”终端“启动后切换到相同目录。
ICO 文件
ico 文件是 系统的应用图标格式,我也不会制作,但找到了一个制作 ico 的网站:
需要的话可以进去制作。
混淆
从 1.2 版本开始, 插件支持开箱即用的 。 是一个众所周知的用于缩小和混淆的开源工具。
插件为每个对应的默认打包任务提供了发布任务:
默认配置添加了一些 规则:
在许多情况下,获得缩小的 应用程序不需要任何额外的配置。但是,有时 可能无法跟踪字节码中的某些用法(例如,如果通过反射使用类java jfilechooser Compose Desktop 初体验之打包,则可能会发生这种情况)。如果遇到仅在 处理后才会发生的问题,可能需要添加自定义规则。为此java jfilechooser Compose Desktop 初体验之打包,通过 DSL 指定配置文件:
compose.desktop {
application {
buildTypes.release.proguard {
configurationFiles.from(project.file("compose-desktop.pro"))
}
}
}
可以参考 关于 规则和配置选项的综合手册。
默认情况下禁用混淆。要启用它,请通过 DSL 设置以下属性:
compose.desktop {
application {
buildTypes.release.proguard {
obfuscate.set(true)
}
}
}
混淆需要根据需要使用了,如果需要控制包体积的话尽量还是打开,可以减小包体积,还会减小代码泄漏的可能性;反之打不打开都行!
实际操作
上面都是理论知识,咱们得实操啊!有基础知识之后实操就很简单了,先来看下 build..kts 中的配置项吧:
compose.desktop {
application {
mainClass = "MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Exe, TargetFormat.Msi, TargetFormat.Deb)
packageName = "PlayWeather"
packageVersion = "1.0.0"
description = "Play Weather App"
copyright = "© 2022 My Name. All rights reserved."
vendor = "Lenovo"
licenseFile.set(project.file("LICENSE.txt"))
modules("java.instrument", "java.management", "java.naming", "java.sql", "jdk.unsupported")
linux {
packageVersion = "1.0.0"
debPackageVersion = "1.0.0"
rpmPackageVersion = "1.0.0"
// 设置图标
iconFile.set(project.file("launcher/icon.png"))
}
macOS {
packageVersion = "1.1.0"
dmgPackageVersion = "1.1.0"
pkgPackageVersion = "1.1.0"
dockName = "PlayWeather"
packageBuildVersion = "1.1.0"
dmgPackageBuildVersion = "1.1.0"
pkgPackageBuildVersion = "1.1.0"
// 设置图标
iconFile.set(project.file("launcher/icon.icns"))
}
windows {
packageVersion = "1.2.0"
msiPackageVersion = "1.2.0"
exePackageVersion = "1.2.0"
// 设置图标
iconFile.set(project.file("launcher/icon.ico"))
}
}
buildTypes.release.proguard {
obfuscate.set(false)
configurationFiles.from(project.file("proguard-rules.pro"))
}
}
}
这里的配置项就不多说了,上面都有过介绍,下面来打包吧!

点击上图中蓝色箭头标注的进行打包,上面说过了,不能跨系统打包,Mac 只能打 Mac 中使用的包。。双击执行 任务:

没问题的话大概会出现上图的样子,由于没有配置自定义包路径,所以还在默认文件中,按照上面所描述的路径进行查看:

复制文件路径,在访达中打开:

双击进行安装即可:

然后在资源库中找到应用双击打开应该会遇到下面的错误:

这时点击取消,然后打开设置 -> 隐私与安全性,往下滑:

点击箭头标注的“仍要打开”按钮,会让你输入电脑的密码,输入完成后会弹出下面的对话框:

点击打开,这时应用就能正常使用了。

苹果端就不打 包了,还需要苹果的开发者账号那一大堆。。。目前先能正常在 Mac 中运行吧!
总结
本文大概总结了下使用 如何进行打包,此项目所有代码都放到了 中。
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299
资源库 - 资源分享下载网 » java jfilechooser Compose Desktop 初体验之打包
常见问题FAQ
- 关于资源售价和售后服务的说明?
- 代码有没有售后服务和技术支持?
- 有没有搭建服务?
- 链接地址失效了怎么办?
- 关于解压密码

