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

JavaFX+Spring Boot项目打包可执行Jar失败,请求技术帮助

JavaFX + Spring Boot 打包问题解决方案

问题概述

  • IDEA内运行项目完全正常,但生成可执行文件时出现两类问题:
    • 通过IDEA Project Structure -> Artifacts 打包,生成的文件无法打开
    • 执行 mvn clean package spring-boot:repackage 命令时,spring-boot:repackage插件报错 Source file must not be null

环境信息

  • JDK:17.0.5
  • JavaFX SDK:20
  • JFOENIX:9.0.10
  • GitHub项目:demoz

一、解决 spring-boot:repackage 报错 "Source file must not be null"

该报错核心原因是Spring Boot重打包插件找不到待处理的原始jar包,结合JavaFX的模块化特性,需调整Maven配置及执行逻辑:

  1. 修正pom.xml插件配置
    JavaFX项目需先通过javafx-maven-plugin完成基础打包,再由Spring Boot插件处理,在pom.xml中添加/调整如下配置:
<build>
    <plugins>
        <!-- JavaFX 打包插件 -->
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.8</version>
            <configuration>
                <mainClass>你的主类全路径</mainClass> <!-- 替换为项目实际主类,如com.example.demoz.MainApplication -->
                <launcher>app</launcher>
            </configuration>
            <executions>
                <execution>
                    <id>default-cli</id>
                    <phase>package</phase>
                    <goals>
                        <goal>package</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <!-- Spring Boot 重打包插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>你的Spring Boot版本</version> <!-- 替换为项目实际版本,如3.1.0 -->
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <mainClass>你的主类全路径</mainClass>
                        <attach>false</attach>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

注意:主类需同时集成Spring Boot与JavaFX,示例结构见下文额外建议。

  1. 调整Maven执行顺序
    避免直接单独调用spring-boot:repackage,先执行JavaFX打包目标再触发重打包:
mvn clean javafx:package spring-boot:repackage

或直接执行完整生命周期命令,确保插件按顺序执行:

mvn clean install
  1. 检查打包类型
    确保pom.xml中<packaging>为jar(默认即为jar,若改为war会导致冲突):
<packaging>jar</packaging>

二、解决IDEA Artifacts打包后文件无法打开问题

IDEA默认Artifacts打包易缺失JavaFX模块化依赖,需调整配置:

  1. 创建正确的Artifact
  • 打开File -> Project Structure -> Artifacts,点击+选择JAR -> From modules with dependencies
  • 选择项目主类,勾选Include in project build
  • 切换至Output Layout标签,将所有依赖(JavaFX SDK、JFOENIX、Spring Boot相关jar)从Available Elements移至Output Root下
  1. 添加JavaFX运行时启动参数
    JavaFX模块化项目无法直接双击jar运行,需创建启动脚本:
# Windows 启动脚本 run.bat
java --module-path "你的JavaFX SDK路径/lib" --add-modules javafx.controls,javafx.fxml,javafx.graphics -jar 生成的jar文件名.jar
# Linux/Mac 启动脚本 run.sh
java --module-path "/你的JavaFX SDK路径/lib" --add-modules javafx.controls,javafx.fxml,javafx.graphics -jar 生成的jar文件名.jar
  1. 使用IDEA专属JavaFX打包工具
    打开Run -> Edit Configurations,添加JavaFX Application配置,指定主类与模块路径后,通过Build -> Build Artifacts选择对应JavaFX artifact打包,生成的包会自动包含JavaFX运行时依赖。

额外建议

  • 校验主类结构:主类需同时初始化Spring Boot与JavaFX,示例代码如下:
@SpringBootApplication
public class MainApplication extends Application {
    private static ConfigurableApplicationContext springContext;

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

    @Override
    public void init() throws Exception {
        springContext = SpringApplication.run(MainApplication.class);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("/fxml/main.fxml"));
        fxmlLoader.setControllerFactory(springContext::getBean); // 由Spring管理控制器
        Parent root = fxmlLoader.load();
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    @Override
    public void stop() throws Exception {
        springContext.close();
    }
}
  • 兼容JFOENIX版本:JFOENIX 9.0.10兼容JavaFX 9+,若出现UI异常可尝试升级至最新兼容版本。

内容的提问来源于stack exchange,提问作者Daniel Semushkin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:22:55