Maven Shade打包的JavaFX应用终端运行报错:无效或损坏Jar文件
JavaFX打包Jar运行报错排查
应用代码
public class Main extends Application { private static Scene scene; @Override public void start(Stage stage) throws IOException { FXMLLoader fxmlloader = new FXMLLoader(LoginControler.class.getResource("loging.fxml")); scene = new Scene(fxmlloader.load()); stage.setScene(scene); stage.setResizable(false); stage.show(); } public static void main(String[] args) { launch(); } }
执行命令与错误信息
执行命令:
root@abc-abc2051A:~# java -jar --module-path /opt/javafx-sdk-11/lib --add-modules javafx.controls myjar-1.0.0-shaded.jar
错误信息:
Error: Invalid or corrupt jarfile /opt/javafx-sdk-11/lib
运行环境
- 操作系统:Ubuntu 22.04.2 LTS
- 架构:64位
- Java版本:OpenJDK 1.8.0_362
问题分析与解决方案
- 命令参数顺序错误:
-jar参数必须直接紧跟目标Jar文件名,你将--module-path放在-jar之后,导致Java误把/opt/javafx-sdk-11/lib当成Jar文件,引发报错。 - 版本兼容性问题:你使用的Java 8与JavaFX 11不兼容。JavaFX从11版本起成为独立模块,不再内置到JDK中,而Java 8的模块机制不完善,两者搭配会出现运行问题。
修正方案
方案一:升级Java并调整命令参数
若要继续使用JavaFX 11,需先将Java版本升级到11或更高,修正后的执行命令为:
java --module-path /opt/javafx-sdk-11/lib --add-modules javafx.controls -jar myjar-1.0.0-shaded.jar
方案二:适配Java 8环境
如果坚持使用Java 8,需确保打包的Jar包含JavaFX 8的依赖,此时无需模块化参数,直接运行:
java -jar myjar-1.0.0-shaded.jar
同时要确认maven-shade-plugin打包时已将JavaFX 8的相关依赖一并打入Jar包,避免运行时出现类缺失问题。
内容的提问来源于stack exchange,提问作者Kanishka
相关产品推荐
相关产品推荐

