SpringBoot no main manifest attribute
今天来记录一次让人很无语的Bug
问题场景:
部署springboot项目上宝塔之后总是启动失败,起先以为是端口冲突,后面查看日志发现报错为
no main manifest attribute, in /www/stupid_fish/agricultural_products_platform_web-0.0.1-SNAPSHOT.jar
大概意思是找不到启动类,我看打包出来的jar包只有89KB也是觉得匪夷所思
搜索相关问题和报错显示是maven的配置问题,回去寻查看maven中的pom.xml文件,发现配置确实有问题,但是这个不是主要的
如下图,其实我的配置类是有一些问题的,比如说主类是错误的,我的启动类名称为Application
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>
com.study.agricultural_products_platform_web.AgriculturalProductsPlatformWebApplication
</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
将AgriculturalProductsPlatformWebApplication修改为自己的启动类Application
修改后执行打包,结果显示success,在本地执行测试一下
what???
所以错误其实并不在这,在项目路径下写mvn clean package后,错误一点点找,发现打包过程和我之前的springboot项目输出的信息差别比较大,经过和之前的springboot项目进行对比,我找到了错误原因
使用start.aliyun.com创建的springboot项目,由于它直接引用依赖,没有parent标签。为解决此问题,可以改用其他URL如start.spring.io/创建项目,并手动在pom.xml中添加parent标签,包括groupId、artifactId和version,例如spring-boot-starter-parent的2.7.0版本。
我之前一直都是使用spring的默认的配置,这个项目很久大概是3个月前的,只是因为比赛需要所以要上传到云服务器,之前一直都是在本地进行测试。
这个项目是当时没有连接成功spring.io,所以选择了阿里云,但是pom.xml文件的内容和之前的很不一样,之前的springboot创建的项目都会使用spring-boot-maven-plugin进行打包,但是阿里云创建的好像就是直接使用maven,我不太懂这其中的区别,暂时也没有去深究。
以下是修复问题的操作,有需要的可以按照自己项目的配置来设置
原来的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study</groupId>
<artifactId>agricultural_products_platform_web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>agricultural_products_platform_web</name>
<description>agricultural_products_platform_web</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.0</spring-boot.version>
</properties>
<dependencies>
<!-- 这里面是你项目中的相关依赖 -->
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>
com.study.agricultural_products_platform_web.AgriculturalProductsPlatformWebApplication
</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
修改后的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.study</groupId>
<artifactId>agricultural_products_platform_web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>agricultural_products_platform_web</name>
<description>agricultural_products_platform_web</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<!-- 这里面是你项目中的相关依赖 -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
其实就是在顶部加入了
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
删除了properties中的
<spring-boot.version>2.7.0</spring-boot.version>
将
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>
com.study.agricultural_products_platform_web.AgriculturalProductsPlatformWebApplication
</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
换成
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
然后刷新pom.xml
执行clean,再执行package打包就好了
这才是打包过程中应该出现的东西