SpringBoot no main manifest attribute

148 阅读1分钟

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也是觉得匪夷所思

img

搜索相关问题和报错显示是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,在本地执行测试一下

QQ图片20240717105146

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打包就好了

QQ图片20240717114648

QQ图片20240717115033

这才是打包过程中应该出现的东西