1. 问题背景
- 项目结构:SpringBoot搭建的父子工程
- 本地开发环境:windows环境启动子工程正常
- 服务器部署环境:linux环境采用java -jar的方式进行服务器部署时,启动报错:xxxxxxx.jar中没有主清单属性
2. 问题原因
查阅资料可得,没有指定Main-Class导致。
解压jar包,进入META-INF目录,查看MANIFEST.MF文件,里面确实没有指定Start-Class和Main-Class
3. 问题处理
在子工程的pom.xml文件中添加如下配置:
说明:
(1)<includeSystemScope>为true:代表maven打包时会将外部引入的jar包打包到项目jar,在服务器上项目才能运行,不加此配置,本地可以运行,因为本地可以再lib下找到外部包,但是服务器上jar中是没有的;
(2)<mainClass>: 指定入口主方法;
(3) <goal>repackage</goal>:个人认为重新打包会自动检测到入口类。本项目必须指定,不指定就会报没有主清单属性
<build>
<plugins>
<!-- 该插件的主要功能是进行项目的打包发布处理 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 设置程序执行的主类 -->
<!-- <configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>${main.class}</mainClass>
</configuration>-->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
4. 结果
重新打包执行java -jar 启动成功