springboot项目打包的可执行jar运行报错问题及解决

 更新时间:2026年04月11日 08:43:35   作者:凡人歌者徐  
本文介绍了SpringBoot项目打包成可执行jar文件后无法使用java-jar命令启动的问题及解决方法,主要是需要在pom.xml文件中添加spring-boot-maven-plugin插件,以便生成正确的MANIFEST.MF文件

问题展现

现在使用springboot开发spring项目是真的方便快捷,程序开发完成之后,直接打包成一个可执行jar文件,就可以在java环境中运行。

那对于新手小伙伴来说,可能会碰到打包好的可执行jar文件无法通过java -jar命令进行启动,报错提示该可执行jar文件中没有主清单属性,如下所示。

仔细观察该可执行jar文件,发现其只有KB级大小,显然是有问题的。

问题解决

在springboot项目的pom.xml文件中,添加以下节点内容,并重新打包。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.2.1.RELEASE</version>
        </plugin>
    </plugins>
</build>

可以看到,加上这段内容之后,重新打包后的jar文件大小就是MB级,再次使用java -jar命令启动也再没有问题。

原理说明

在oracle官网的java文档中有一段话作者进行了部分截取。

The java command starts a Java application. 
If the -jar option is specified, its argument is the name of the JAR file containing class and resource files for the application. 
The startup class must be indicated by the Main-Class manifest header in its source code.

翻译过来就是说,java命令是用来启动一个java应用的,如果java命令后接了-jar选项,那么紧跟的参数就是可执行jar文件的名字,这个可执行jar文件包含了编译好的字节码文件以及资源文件。启动类必须通过源码中的manifest头的Main-Class属性指定。

简单点说,java -jar 命令执行的时候,会去运行可执行jar文件的META-INF/MANIFEST.MF文件中的Main-Class属性指定的类,如果没有找到,就会报没有主清单的错误。

加了spring-boot-maven-plugin插件生成的MANIFEST.MF文件

没加spring-boot-maven-plugin插件生成的MANIFEST.MF文件

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 将字符串、list 写入到文件,并读取内容的案例

    java 将字符串、list 写入到文件,并读取内容的案例

    这篇文章主要介绍了java 将字符串、list 写入到文件,并读取内容的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringBoot保护配置文件中敏感信息的保姆级教程

    SpringBoot保护配置文件中敏感信息的保姆级教程

    这篇文章主要为大家详细介绍了SpringBoot保护配置文件中敏感信息的保姆级教程,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-12-12
  • Java中如何动态创建接口的实现方法

    Java中如何动态创建接口的实现方法

    这篇文章主要介绍了Java中如何动态创建接口的实现方法的相关资料,需要的朋友可以参考下
    2017-09-09
  • 使用jvm sandbox对三层嵌套类型的改造示例

    使用jvm sandbox对三层嵌套类型的改造示例

    这篇文章主要为大家介绍了使用jvm sandbox对三层嵌套类型的改造示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Java Elastic-Job分布式定时任务使用方法介绍

    Java Elastic-Job分布式定时任务使用方法介绍

    xxl-job 通过一个中心式的调度平台,调度多个执行器执行任务,调度中心通过 DB 锁保证集群分布式调度的一致性,这样扩展执行器会增大 DB 的压力,然而大部分公司的任务数,执行器并不多;xxl-job 提供了非常好用的监控页面甚至还有任务失败的邮件告警功能
    2023-01-01
  • Java中OGNL表达式语言的使用详解

    Java中OGNL表达式语言的使用详解

    本文介绍了OGNL(ObjectGraphNavigationLanguage)表达式语言,这是一种用于Java语言的对象图导航和操作的表达式语言,它支持访问对象属性、调用对象方法、执行算术和逻辑运算,以及处理集合和数组等操作,OGNL的语法简洁明了
    2024-12-12
  • Java多线程Thread基础学习

    Java多线程Thread基础学习

    每一个正在执行的程序都是一个进程,资源只有一块,所以在同一时间段会有多个程序同时执行,但是在一个时间点上,只能由一个程序执行,多线程是在一个进程的基础之上的进一步划分,需要的朋友可以参考下
    2023-04-04
  • mybatis-plus根据任意字段saveOrUpdateBatch更新插入的方法实现

    mybatis-plus根据任意字段saveOrUpdateBatch更新插入的方法实现

    Iservice接口下的saveOrUpdateBatch方法默认是根据主键来决定是要更新还是插入的,本文就来详细的介绍一下saveOrUpdateBatch的使用,感兴趣的可以来了解一下
    2026-04-04
  • springboot实现热部署操作方法

    springboot实现热部署操作方法

    这篇文章主要介绍了springboot实现热部署操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Spring Boot 完整启动流程详解

    Spring Boot 完整启动流程详解

    本文完整解析Spring Boot启动流程的9个核心阶段,结合源码与实战场景,帮助开发者深入理解框架运行机制,感兴趣的朋友跟随小编一起看看吧
    2025-09-09

最新评论