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

JavaFX Maven独立应用打包后无法运行:找不到主类求助

解决JavaFX Maven项目打包后无法运行的问题

问题核心

你碰到的问题本质是:

  • Maven默认install生成的是不含依赖的瘦jar,JavaFX作为模块化依赖不会被自动打包进去
  • JavaFX的模块系统要求运行时必须加载对应模块,直接用java -jar执行瘦jar会出现找不到主类或依赖的错误

解决方案一:用javafx-maven-plugin构建可执行包(官方推荐)

javafx-maven-plugin是官方适配的打包工具,支持生成包含所有依赖的可执行jar,或者原生安装包。

修改pom.xml配置

确保pom中已引入该插件,并配置正确的主类、模块信息:

<build>
    <plugins>
        <!-- JavaFX 核心插件 -->
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.8</version>
            <configuration>
                <!-- 模块化项目格式:模块名/全类名,非模块化直接写全类名 -->
                <mainClass>your.module.name/your.package.Main</mainClass>
            </configuration>
        </plugin>

        <!-- 辅助生成带依赖的jar -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>your.package.Main</mainClass>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

生成可执行jar

执行以下命令生成包含所有依赖的jar:

mvn clean javafx:jar

生成的jar在target目录下,命名格式为${project.name}-${project.version}-jar-with-dependencies.jar,直接用java -jar命令即可运行。

生成原生安装包(双击即可运行)

如果想生成系统原生的可执行程序(exe/dmg等),用jlink打包:

mvn clean javafx:jlink

生成的文件在target/image目录,里面的可执行文件直接双击就能运行。

解决方案二:用maven-shade-plugin打包

如果偏好使用maven-shade-plugin,需要处理JavaFX的模块信息,配置如下:

<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>your.package.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>
    </plugins>
</build>

执行mvn clean install后,target目录下的shaded jar就能用java -jar正常执行。

关键注意事项

  • 确保你的Main类继承了Application,并正确重写start()方法
  • 模块化项目的module-info.java必须声明JavaFX依赖,示例:
module your.module.name {
    requires javafx.controls;
    requires javafx.fxml;
    opens your.package to javafx.fxml;
    exports your.package;
}
  • JavaFX 17及以上版本需要搭配JDK 17+运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:45:37