springboot项目打包的可执行jar运行报错问题及解决
问题展现
现在使用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中SimpleDateFormat日期格式转换详解及代码示例
这篇文章主要介绍了Java中SimpleDateFormat日期格式转换详解及代码示例,具有一定借鉴价值,需要的朋友可以参考下。2017-12-12


最新评论