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

IntelliJ中Maven JavaFX项目可执行Jar启动失败求助

JavaFX Maven项目打包可执行Jar启动失败问题解决

问题1:执行java -jar时找不到JavaFX类

运行命令java -jar myproject-1.0-SNAPSHOT.jar出现错误:

Error: Could not find or load main class mypackage.myproject.Main Caused by: java.lang.NoClassDefFoundError: javafx/application/Application

原因

JavaFX自JDK 11起不再捆绑在JDK中,默认的maven-jar-plugin打包的Jar仅包含项目自身代码,不会引入依赖的JavaFX类,导致运行时找不到相关类。

解决办法

方案1:使用jlink创建自包含运行镜像(官方推荐)

你的pom中已配置javafx-maven-plugin,直接执行以下命令生成包含JRE和所有依赖的自包含镜像:

mvn clean javafx:jlink

生成的镜像位于target/app目录,可通过目录内的启动脚本(Windows为app.exe,Linux/macOS为app)直接启动应用,无需额外安装JDK/JavaFX。

方案2:打包包含所有依赖的胖Jar

添加maven-shade-plugin到pom的build/plugins中,打包时合并所有依赖并排除冲突的签名文件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>mypackage.myproject.Main</mainClass>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

执行mvn clean package后,target目录下的PearCar-1.0-SNAPSHOT.jar即为可直接运行的胖Jar,通过java -jar命令启动即可。

问题2:IntelliJ Artifact生成Jar出现签名校验错误

生成的Jar启动时出现:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

原因

项目依赖的部分Jar(如Aspose PDF、iText)带有数字签名,打包时将签名文件(.SF/.DSA/.RSA)一并包含,导致JVM校验签名时失败。

解决办法

方法1:使用maven-shade-plugin打包(同问题1的方案2)

插件配置中的filters已自动排除所有签名文件,避免校验错误。

方法2:修改IntelliJ Artifact配置

  1. 打开File > Project Structure > Artifacts
  2. 选中你的Jar artifact,展开右侧的Available Elements
  3. 逐个展开依赖Jar,右键点击META-INF下的.SF/.DSA/.RSA文件,选择Exclude
  4. 重新构建Artifact即可

额外优化建议

  1. 更新JavaFX版本:将pom中JavaFX依赖的版本从19-ea+7替换为正式版19,避免预览版潜在问题。
  2. 补充缺失依赖:你的module-info.java中声明了requires commons.lang3;,但pom中未添加该依赖,需补充:
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>
  1. 检查module路径配置:javafx-maven-plugin中的mainClass格式应为模块名/主类全路径,你的配置mypackage.myproject/mypackage.myproject.Main是正确的,无需修改。

内容的提问来源于stack exchange,提问作者java-user2000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:00:58