使用JPackage把Java项目打包成exe文件

        基于jdk17 + javaFX17 , 写一个简单的桌面程序,用Jlink生成运行时环境,再用Jpackage打包成exe可执行文件。

环境

        windows

        下载安装jdk17,并配置系统路径PATH。java 17 支持和非模块化,此处使用模块化方式。

        下载安装javaFX17,并配置系统路径PATH

写一个简单的JavaFX窗口

        在文件夹E:\Projects\java下新建一个目录JpackageDemo

        新建文件夹 src/hellofx

        在文件夹hellofx里新建两个文件。

        项目结构为:

        JpackageDemo->

                                    src->

        HelloFX.java

package hellofx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javaFxVersion = System.getProperty("javafx.version");
        Label l = new Label("xxxHello, JavaFX" + javaFxVersion + ", running on java" + javaVersion);
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

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

        module-info.java

module hellofx {
    requires javafx.controls;

    exports hellofx;
}

        在项目文件夹 E:\Projects\java\JpackageDemo> 下执行命令 (后续都在这个文件夹下执行命令) :

javac --module-path 'E:\Java\javafx-sdk-17.0.11\lib' --add-modules javafx.controls -d mods  .\src\hellofx\HelloFX.java .\src\hellofx\module-info.java

         此时文件夹下生成mods文件,里面包含class文件。

        运行此项目:

java --module-path 'mods;E:\Java\javafx-sdk-17.0.11\lib' --add-modules javafx.controls,javafx.fxml -m hellofx/hellofx.HelloFX

        运行效果:

使用Jlink生成运行时环境

        使用 jlink 工具创建自定义的JRE环境,将mods和一些javafx模块编译进去,生成的custom-runtime文件夹就是我们自定义的JRE环境,这个自定义 JRE 包含了我们指定的模块(lib/modules里)以及必要的 Java 运行时组件。可与windows系统下安装的JRE做个对比,精简了200M左右 (不仅jmods文件下的模块没有了,还少了很多其他dll)。

jlink --module-path "E:\Java\javafx-sdk-17.0.11\lib;mods" --add-modules hellofx,javafx.controls,javafx.graphics --output custom-runtime

        进入custom-runtime/bin目录,运行程序:

cd custom-runtime/bin
./java -m hellofx/hellofx.HelloFX

       可以出现执行窗口:()

    

        我们也可以把这个精简的jre环境写进Docker里,精简Docker镜像大小 

使用Jpackage打包成exe

        需要安装WIX

        如果没有使用 Jlink 生成jre,Jpackage会悄悄使用 Jlink 帮你生成JRE。

        会在output/MyApp文件夹下生成一个可执行文件MyApp.exe。 

jpackage --runtime-image custom-runtime 
         --name MyApp
         --module hellofx/hellofx.HelloFX 
         --dest output 
         --type app-image  # --type exe 会生成一个安装exe文件

        点击MyApp.exe即可执行程序。

        大多数情况下,直接分发MyApp.exe文件即可。

        如果想更精简,可使用GraalVM 的 Native Image工具将Java 程序编译为本地可执行文件(Native Executable)。

        GraalVM 的 Native Image 是一个功能强大的工具,可以将 Java 应用程序编译成本地可执行文件,而不需要依赖于 JVM。这种方式可以显著减少应用程序的启动时间和内存占用,并且生成的可执行文件可以直接运行,而无需安装 Java 运行时环境。

        Tips:

        由于JMS (Java Module System) 按顺序加载模块,使用Idea时,确保手动编译的文件位于out目录(Idea编译后的目录)下面,否则直接使用Idea Run 项目会运行失败。如下,out1是我们手动编译后的字节码文件夹。

        

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值