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

IntelliJ中JavaFX项目可运行Jar无法执行问题求助

排查M1 Mac上JavaFX可运行Jar无法执行的问题

一、先确认终端执行命令是否正确

直接用java -jar xxx.jar肯定跑不起来——JavaFX是模块化框架,必须指定模块路径和需要加载的模块。正确的执行命令格式如下:

java --module-path "/path/to/javafx-sdk-19/lib" --add-modules javafx.controls,javafx.fxml -jar your-jar-file.jar

注意:把/path/to/javafx-sdk-19/lib替换成你本地JavaFX SDK的实际路径,比如~/Library/Java/JavaVirtualMachines/javafx-sdk-19/lib

二、用Maven插件打包自包含本地镜像(推荐方案)

IntelliJ自带的Artifact打包逻辑不适合JavaFX,尤其是M1这种ARM架构设备。直接用javafx-maven-plugin打包成适配M1的本地镜像(.app或.dmg),步骤如下:

  1. 在项目的pom.xml中添加插件配置:
<build>
    <plugins>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.8</version>
            <configuration>
                <mainClass>com.example.hellofx.HelloApplication</mainClass> <!-- 替换成你的主类全路径 -->
                <launcher>HelloFX</launcher> <!-- 生成的启动器名称 -->
                <jlinkImageName>HelloFX</jlinkImageName> <!-- 输出镜像文件夹名称 -->
                <nativeImage>true</nativeImage> <!-- 生成适配M1的本地镜像 -->
                <vendor>YourName</vendor>
            </configuration>
        </plugin>
    </plugins>
</build>
  1. 执行Maven命令:
mvn clean javafx:jlink

执行完成后,在target/HelloFX/bin目录下会出现HelloFX启动脚本,直接运行就能打开应用,不需要额外配置JavaFX路径。

三、如果非要打可运行Jar(不推荐)

用maven-assembly-plugin打包包含所有依赖的Jar,同时处理模块依赖:

  1. 在pom.xml中添加assembly插件配置:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>com.example.hellofx.HelloApplication</mainClass>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  1. 执行mvn clean package生成带依赖的Jar后,依然需要用带模块参数的命令运行,或者创建一个Shell脚本简化操作:
#!/bin/bash
java --module-path "lib" --add-modules javafx.controls,javafx.fxml -jar your-jar-with-dependencies.jar

把所有JavaFX依赖Jar放到和脚本同目录的lib文件夹下,运行脚本即可启动应用。

四、M1架构兼容关键注意点

  • 确保你下载的JavaFX SDK是aarch64(ARM架构)版本,不要用x86_64版本,否则会出现架构不兼容错误。
  • Java 16对M1的兼容性一般,建议升级到Java 17+(LTS版本),适配性更好。
  • IntelliJ的Artifact打包默认不会处理JavaFX的模块化依赖,直接生成的Jar缺少必要的模块信息,自然无法运行。

内容的提问来源于stack exchange,提问作者John Hendricks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:25:31