<!--markdown-->####问题描述

前几天在开发spring boot程序,在IDE运行没有任何问题,使用mvn package打包后,生成docker部署到服务器发现了问题。
出现错误信息:

no main manifest attribute,in xxx.jar

其实还有更多信息显示,在命令行使用java -jar xxxx.jar执行也会提示找不到main函数。那么问题出现在哪里呢?为何main函数明明在Application类中,为何提示找不到呢?

####解答

要想知道问题出现在哪里,我们要从jar配置文件manifest说起。在jar中,有class文件,还有一个结构目录,管理结构目录的就是manifest.xml 配置文件。

manifest通常定义版本,依赖路径和依赖包等等。最重要的是,manifest还定义了main函数的入口,使用java命令后,会解析里面的manifest配置,然后再通过配置找到main函数。

----可以解压manifest后,看到并没有配置main函数。(左边是缺少main函数配置的manifest文件,右边是正确的文件结构):

manifest 文件格式。

####解决的办法

经过网查得知,有两个解决办法:

  • 第一种解决办法:往spring boot的pom文件添加指定的打包插件。我们需要把它补上,插件配置如下:

    <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
  • 第二种办法就是启动的时候通过命令行指定main函数入口,语法格式如下:

  1. -jar xxx.jar com.XXX.xxx.className

完毕。