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

Spring Boot(v2.7.2)打包Jar运行报java.lang.NoSuchMethodError异常

Spring Boot Jar运行出现java.lang.NoSuchMethodError(List.of方法)的解决方案

问题场景

在Eclipse中运行Spring Boot 2.7.2项目正常,但打包成Jar后在CMD运行时,代码第50行的List.of(role1, role2)抛出java.lang.NoSuchMethodError异常。

相关代码

@Override
public void run(String... args) throws Exception {
        try {
            Role role1 = new Role();
            role1.setId(AppConstants.ADMIN_USER);
            role1.setName("ROLE_ADMIN");
    
            Role role2 = new Role();
            role2.setId(AppConstants.NORMAL_USER);
            role2.setName("ROLE_NORMAL");       
    
            List<Role> roles = List.of(role1, role2); //@line 50
    
            List<Role> result = this.roleRepo.saveAll(roles);
    
            result.forEach(r -> System.out.println(r.getName()));
    
        } catch (Exception e) {
            e.printStackTrace();
        }
}

报错截图

报错截图

原因分析

List.of()是Java 9及以上版本新增的静态方法,若打包后运行Jar的JDK版本低于Java 9,就会触发该异常。Eclipse中运行正常,说明开发环境使用的是Java 9+,但打包或运行Jar时使用了更低版本的JDK。

解决方法

  • 检查并升级运行环境JDK版本
    打开CMD执行java -version,确认输出的版本号≥9。若低于9,升级JDK至9或更高版本(推荐Java 11,Spring Boot 2.7.x兼容Java 8-17)。

  • 统一项目编译和打包的JDK版本
    在项目的pom.xml中明确指定JDK版本:

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    

    Eclipse中右键项目 → 属性 → Java Build Path → 库,确认JRE系统库为Java 9+;再进入Java Compiler,勾选“使用模块路径上的执行环境'JavaSE-11'的合规性”(对应你选择的JDK版本)。

  • 替换为Java 8兼容写法(若需保留Java 8运行)
    将List.of(role1, role2)替换为Java 8支持的代码:

    // 可变列表
    List<Role> roles = Arrays.asList(role1, role2);
    // 不可变列表(模拟List.of的效果)
    List<Role> roles = Collections.unmodifiableList(Arrays.asList(role1, role2));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:55:15