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

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

问题分析与解决方案

  1. 命令参数顺序错误:-jar 参数必须直接紧跟目标Jar文件名,你将--module-path放在-jar之后,导致Java误把/opt/javafx-sdk-11/lib当成Jar文件,引发报错。
  2. 版本兼容性问题:你使用的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:53:12