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
相关产品推荐
相关产品推荐

