使用 jlink 构建自包含的 JavaFX 应用程序

[JavaFX]( 是一个用于构建富客户端应用程序的开源框架。它提供了丰富的 UI 控件、动画、图表等功能,使开发者能够轻松地创建漂亮且交互性强的用户界面。JavaFX 还提供了一种方便的方式将应用程序打包成自包含的可执行文件,这使得部署和分发应用程序变得非常简单。

在本文中,我们将介绍如何使用 jlink 工具来构建一个自包含的 JavaFX 应用程序。jlink 是 JDK 9 中引入的一个新工具,它可以将 JDK 和应用程序的依赖项打包到一个自定义运行时镜像中,从而可以在没有安装 JDK 的机器上运行应用程序。

准备工作

在开始之前,我们需要确保以下几点:

  • 安装 JDK 11 或以上版本,并配置好环境变量。
  • 下载并安装最新版本的 JavaFX SDK。你可以从 [JavaFX 官方网站]( 上找到下载链接。
  • 创建一个简单的 JavaFX 应用程序。下面是一个示例代码:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorldApp extends Application {

    @Override
    public void start(Stage primaryStage) {
        Label label = new Label("Hello, World!");
        StackPane root = new StackPane(label);
        Scene scene = new Scene(root, 300, 200);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Hello World App");
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

构建自包含应用程序

要构建自包含的 JavaFX 应用程序,我们需要执行以下步骤:

  1. 使用 jlink 工具创建一个自定义运行时镜像。在命令行中执行以下命令:
jlink --module-path $JAVA_FX_SDK/lib --add-modules javafx.controls,javafx.fxml --output runtime

这个命令将会从 JavaFX SDK 中导入 javafx.controlsjavafx.fxml 模块,并将它们与 JDK 模块一起打包到一个名为 runtime 的目录中。

  1. 在应用程序的根目录下创建一个 launcher 脚本。这个脚本用于启动应用程序。下面是一个示例:
#!/bin/sh
java --module-path runtime --add-modules javafx.controls,javafx.fxml -m com.example/com.example.HelloWorldApp

要运行应用程序,只需要执行 launcher 脚本即可。

分发应用程序

现在我们已经构建了一个自包含的 JavaFX 应用程序,接下来我们需要将它分发给用户。最简单的方式是将整个应用程序目录打包成一个 ZIP 文件,然后让用户下载并解压缩它。

另一种方式是使用打包工具(如 Inno Setup、Install4j 等)创建一个安装程序。这种方式可以提供更好的用户体验,并允许用户在安装过程中进行一些自定义配置。

总结

在本文中,我们介绍了如何使用 jlink 工具来构建一个自包含的 JavaFX 应用程序。通过将 JDK 和应用程序的依赖项打包到一个自定义运行时镜像中,我们可以在没有安装 JDK 的机器上运行应用程序。这使得部署和分发 JavaFX 应用程序变得非常简单。

希望本文能帮助你开始构建自己的 JavaFX 应用程序,并将它们分发给用户。祝你好运!


journey
    title JavaFX 应用程序构建之旅
    section 准备工作
    section 构建自包含应用程序
    section 分发应用程序
stateDiagram
    [*] --> 创建 JavaFX 应用程序
    创建 JavaFX 应用程序 --> 构建自包含应用程序