🗒️JavaFX应用程序打包————使用jlink和jpackage
00 分钟
2024-5-12
2024-5-11
type
status
date
slug
tags
summary
category
password
icon
原文链接:

摘要

示例演示基于java21和JavaFX 21,使用jdk的jlink和jpackage命令打包 FireX AI 桌面程序发布包。

运行环境

JDK: Java21 [具体版本:OpenJDK Temurin-21.0.1+12 (build 21.0.1+12-LTS)]
JavaFX: JavaFX 21 [具体版本:javafx-sdk-21.0.1 和 javafx-jmods-21.0.1]
打包命令:jlink 和 jpackage

基本概念

什么是 jlink?

You can use the jlink tool to assemble and optimize a set of modules and their dependencies into a custom runtime image.
从定义可知,使用jlink工具,可以将一组模块及其依赖项,组装和优化到自定义运行时映像中。
说人话就是:使用 jlink 命令,可以组装定制模块化Java 程序的运行时镜像。它包含了基础运行时(即JRE) 和你自己的应用程序。
那么为什么需要组装和定制运行时镜像呢?
因为,
一、我们不得不这样:从 Java9 推出模块化后,Java 官方只有一个JDK安装包的不再提供单独的JRE了。想要打包自带JRE的应用程序包,不能再用Java9 之前的方式了。(Java8:怎么感觉是在说我呢?)
二、这样能带来的好处:
好处 1:可以大大缩小最终的应用发布程序包大小,大约一般缩小 40%-50%左右,视不同程序有所不同(稍后细说);
好处 2:运行镜像可以定制只包括用到 jdk 模块,不用到的 jdk 模块,可以剔除,这在 java9 模块化之前,是做不到的。

什么是 jpackage?

生成适合主机系统的应用程序包,模块化和非模块化的应用程序均可用。
简单的说,通过 jpackage 可以将应用程序打包成 windows 平台的 exe 安装包,macos 的 dmg或 pkg 安装包。

打包步骤

1. 用 jlink 组装和定制运行时镜像:

命令示例

环境变量

PATH_TO_FX_MODS:javafx jmods 的位置
javafx-jmods-21.0.1目录内容如下:
notion image
FIREX_LIB:FireX AI应用程序的 jar 位置
FIREX_LIB/modules目录内容如下:
notion image

参数说明

注意:
  • 以上命令执行需要应用程序依赖的 jar 都是模块化的,如果没有模块化,需要做转换。
  • 将非模块化的 jar 转换成模块化的 jar 的方法,请参考附录I。
  • 有关 jlink命令的参数和更多用法,请在安装了 JDK 的电脑运行命令 “jlink -h”进行查看.或查看官方文档:https://docs.oracle.com/en/java/javase/11/tools/jlink.html

2.用 jpackage 将 jlink 组装的运行时镜像打包成 macos 的安装包dmg 和 pkg

命令示例

参数说明

注意:
  • 有关 jpackage 命令的参数和更多用法,请在安装了 JDK 的电脑运行命令 “jpackage -h”进行查看

MacOS 安装未签名的 FireX AI 客户端过程

安装 DMG 格式的安装包

notion image
将 FireX AI.app 图标拖动到 Applications 文件夹进行安装,得到提示如下:
notion image
点击“好”按钮后,在“安全与隐私”中看到如下:
notion image
点击“仍要打开”,再提示如下:
notion image
继续点击“打开”按钮,即可打开 FireX AI 客户端。至此,dmg 格式的FireX AI 安装完成。

安装 PKG 格式的安装包

鼠标双击 “FireX-AI_macos-aarch64-0.3.0 (2).pkg”安装,得到提示:
notion image
提示身份不明的开发者,在“安全与隐私”设置里,看到如下所示:
notion image
点击“仍要打开”按钮,得到如下提示:
notion image
点击“打开”按钮,继续安装
notion image
接下来按照引导一步步安装完即可。
notion image
在应用程序种看到如下图标,点击,即可打开 FireX AI客户端。至此,pkg 格式的FireX AI 安装完成。
notion image

附录 I:非模块化的 jar 转换成模块化

以下通过 maven 插件moditect演示如何将hankcs lucene 分词器,apache commons lang3,hutool 转换成模块的 jar:

附录 II:jpackage 的参数

以下内容是在 MacOS 下的 GraalVM 21 运行 jpackage -h 显示的内容:

🤗 总结归纳

总结文章的内容

📎 参考内容

 
 
 
💡
有关使用上的问题,欢迎您在底部评论区留言,一起交流~
上一篇
GPT-4模型免费用了,无需付费直接使用GPT-4o
下一篇
全网最详细将Java项目打包成.exe可执行文件

评论
Loading...