Java 简明教程
Java - Packaging Tools
在 Java 14 中,引入了新的 packaging tool jpackage 以替换 javapackager。javapackager 是 JavaFX 工具包的一部分,并于 Java 8 中引入。作为 Java 11 起,JavaFX 并非 Java API 的标准功能,javapackager 不是标准提供的一部分。jpackage 实现了此目的。jpackage 使开发人员能够将 jar 文件打包成本机可安装格式,如 Windows 的 exe/msi、MacOS 的 pkg/dmg 等。
开发人员可以使用 jlink 将所需的 JDK 模块压缩到最少限度的模块,并使用 jpackage 创建一个轻量级映像。
Need of jpackager
当需要分发软件时,首选方式是向最终用户提供一个可安装的软件包。该可安装软件包通常包含 JDK、模块、任何依赖文件和配置,并为用户提供熟悉的方式来安装该软件。用户不应被要求将 JRE 或 JDK 作为运行 Java 应用程序的先决条件。jpackage 处理所有这些情况,并将所有必需的文件与 JRE/JDK 一起打包到本机安装程序中。
Command Line Options for jpackager
jpackage 是一个命令行工具,提供了各种选项来定制可安装的软件。以下是一些 jpackager 提供的功能:
-
开发人员可以提供一个自定义图标。
-
开发人员可以提供一个安装应用程序的具体位置。
-
开发人员可以传递给应用程序的应用程序参数, JVM 在启动应用程序时使用的选项。
-
开发人员可以设置文件关联以启动应用程序。
-
开发人员可以设置选项以修改特定于平台的菜单组选项以启动应用程序。
-
开发人员可以配置多个启动器来启动应用程序。
-
使用 XCode,也可以对包进行签名。不过,这只适用于 MacOS。
Prerequisite
以下是在准备可安装文件之前使用 jpackager 工具的先决条件。
-
首要要求是具有 JDK 和软件应用程序。
-
获取如下所示的特定于平台的打包工具: Windows - 若要创建 EXE/MSI 可安装程序,需要第三方库 wix 3.0 或更高版本 Ubuntu Linux − 若要创建一个 RPM、DEB 包,我们需要 fakeroot 包。 Red Hat Linux − 若要创建一个 RPM、DEB 包,我们需要 rpm-build 包。 MacOS − 我们可以使用 Xcode 命令行工具创建包。可以用 -mac-sign 选项来对包进行签名,并可以用 -icon 提供自定义图标。
-
应按照平台准备应用程序软件包。对于每个平台,我们必须单独运行命令。
Create a Package
我们可以使用以下命令创建软件包:
Syntax
jpackage --input lib \
--name Tester \
--main-jar Tester.jar \
--main-class com.tutorialspoint.Tester \
--type msi \
--java-options '--enable-preview'
其中
-
input − 包含所需库的文件夹。
-
name − 可安装软件包的名称
-
main-jar − 用于启动应用程序的 jar 文件。
-
main-class− 用于启动的 JAR 中的主类的名称。如果主 JAR 中的 MANIFEST.MF 文件包含主类名称,则不需要此选项。
-
type − 可安装的类型。MacOS 的 DMG/PKG,Windows 上的 MSI/EXE 选项和 Linux 上的 DEB/RPM 选项。
-
java-options − Java 运行时的选项
此命令将创建一个可在 Windows 上安装的 MSI 文件,并且应用程序可以使用任何其他软件。
Example of a Package
public class APITester {
public static void main(String[] args) {
System.out.println("Welcome to TutorialsPoint.");
}
}
编译和运行程序
$javac APITester.java
$jar cf APITester.jar APITester.class
Output
对于 Windows 可执行文件,需要下载 WiX Toolset v3.11.2(wix311-binaries.zip) 并将工具包添加到路径。
创建 jar 并设置路径后,将 jar 放入名为 lib 的文件夹中,并运行以下命令来创建一个 Windows MSI 安装程序。
$jpackage --input lib --name APITester --main-jar APITester.jar --main-class APITester --type msi