You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Java 23与JavaFX创建可执行应用的问题求助

解决JavaFX Windows可执行文件构建问题的几种方案

针对你的情况(OpenJDK 23、Windows平台、存在非模块化依赖),以下是几个更优的构建方案:

方案1:使用官方javafx-maven-plugin打包自包含应用

这是JavaFX官方推荐的打包方式,可自动处理JavaFX的原生组件,无需手动指定SDK路径:

  1. 在Maven的pom.xml中添加插件配置:
<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>23</version>
    <configuration>
        <!-- 替换为你的主类全路径 -->
        <mainClass>com.yourpackage.YourMainClass</mainClass>
        <!-- 仅打包Windows平台 -->
        <platforms>
            <platform>win</platform>
        </platforms>
        <!-- 跳过模块检查,适配非模块化依赖 -->
        <skipModuleCheck>true</skipModuleCheck>
        <!-- 根据项目需求调整JavaFX模块 -->
        <modules>
            <module>javafx.controls</module>
            <module>javafx.fxml</module>
        </modules>
    </configuration>
    <executions>
        <execution>
            <id>default-cli</id>
            <phase>package</phase>
            <goals>
                <goal>jlink</goal>
                <goal>jpackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  1. 执行Maven命令:
mvn clean package

执行完成后,target目录下会生成包含JRE、JavaFX运行时和应用的独立文件夹,里面直接有可执行exe文件,无需外部依赖。

方案2:直接使用JDK自带的jpackage工具

jpackage是JDK 16+内置的打包工具,支持将Java应用打包成原生可执行文件,兼容非模块化项目:

  1. 先用maven-shade-plugin生成包含所有依赖的jar包
  2. 打开命令行,进入项目根目录,执行以下命令(替换为你的实际参数):
jpackage --type exe ^
--input target ^
--name YourAppName ^
--main-jar your-shaded-jar-file.jar ^
--main-class com.yourpackage.YourMainClass ^
--add-modules javafx.controls,javafx.fxml ^
--module-path "path/to/javafx-sdk-23/lib" ^
--runtime-image target/jre ^
--dest target/dist
  • --type exe:指定生成Windows可执行文件
  • --input:jar包所在目录
  • --main-jar:你的shade jar文件名
  • --main-class:主类全路径
  • --add-modules:添加需要的JavaFX模块
  • --module-path:指向本地JavaFX SDK的lib目录
  • --runtime-image:生成绑定到exe中的JRE镜像目录
    执行后,target/dist目录下会生成独立的exe安装包或绿色版应用,无需用户额外安装JRE。

方案3:优化Launch4j配置(无需固定绝对路径)

如果想继续用Launch4j,可通过相对路径解决SDK依赖问题:

  1. 将JavaFX SDK的lib文件夹复制到应用目录下(比如放在app/lib/javafx-lib)
  2. 在Launch4j配置中设置VM参数:
--module-path ./lib/javafx-lib --add-modules javafx.controls,javafx.fxml
  1. 配置绑定JRE:选择Bundle JRE,指定JRE的相对路径(比如将JRE放在app/jre目录下)
    打包后的应用可携带自身的JRE和JavaFX组件,路径为相对路径,不受安装位置影响。

补充说明

  • shade jar运行报错原因:JavaFX包含原生平台组件(.dll文件等),无法被shade到jar中,必须通过--module-path指定或打包到应用目录。
  • 非模块化依赖处理:上述方案均支持混合模块化/非模块化项目,无需强制添加module-info.java,通过--add-modules和skipModuleCheck即可绕过模块检查。

内容的提问来源于stack exchange,提问作者Gabriel Alberto Pérez Guerra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:53:11