记录一次“xxx.jar中没有主清单属性“异常

写在前面

以下方法仅仅是解决我的问题并成功运行,如果你的问题没有解决请再查找其他原因。

环境

spring boot 2.7.0 + maven 3.8.4 + jdk 17

已经添加的配置

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
        <finalName>${project.artifactId}</finalName>
    </build>

没有解决,后给 spring-boot-maven-plugin 增加指定入口类,没有解决。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring-boot-starter-parent.version}</version>
    <configuration>
        <mainClass>com.xx.xx.xxApplication</mainClass>
    </configuration>
</plugin>

考虑无果,使用mvn clean package查看打出来的jar包发现问题。正常jar包的目录结构是:

我的jar包里面缺少BOOT-INF的文件夹,并且缺少xxx.jar.original这个文件,表明 spring-boot-maven-plugin 这个插件并没有被正确配置或者没有被Maven执行。因为 BOOT-INF 文件夹是Spring Boot 特有的,它包含了应用的字节码和依赖库。如果你的JAR文件中没有这个文件夹,那么可能是因为Maven没有执行spring-boot-maven-plugin

最终解决:将spring-boot-starter-parent依赖的方式改成父类继承

<?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 http://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/>
    </parent>
    <groupId>xx.xx.xx</groupId>
    <artifactId>xx</artifactId>
    <version>xx</version>

    ......

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
        </plugins>
        <finalName>${project.artifactId}</finalName>
    </build>
</project>

其他没有BOOT-INF 文件夹可能的原因

如果你在使用Spring Boot Maven插件打包应用程序时,生成的JAR文件中没有BOOT-INF文件夹,这可能是因为spring-boot-maven-plugin没有被正确配置或者没有被Maven执行。

BOOT-INF文件夹是Spring Boot特有的,它包含了应用的字节码和依赖库。如果你的JAR文件中没有这个文件夹,那么可能是因为Maven没有执行spring-boot-maven-plugin

请确保你的pom.xml文件中包含了以下配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

然后,你需要运行mvn clean package或者mvn clean install命令来打包你的应用。这些命令会执行spring-boot-maven-plugin,生成包含BOOT-INF文件夹的JAR文件。

如果你已经做了以上的步骤,但是仍然没有BOOT-INF文件夹,那么可能是以下原因:

  • 你的pom.xml文件有错误。检查你的pom.xml文件,确保所有的标签都正确地关闭了,所有的插件都在<build><plugins>部分中,所有的配置都在插件的<configuration>部分中。

  • 你的IDE没有正确地更新Maven项目。如果你正在使用IDE(如Eclipse或IntelliJ IDEA),尝试右键点击项目,然后选择"Maven -> Update Project"(Eclipse)或"Maven -> Reload project"(IntelliJ IDEA)。

  • 你可能正在尝试运行的JAR文件不是由spring-boot-maven-plugin生成的。spring-boot-maven-plugin会生成一个名为target/{project-name}-{version}.jar的文件,其中{project-name}是你的项目名,{version}是你的项目版本。确保你正在运行的是这个文件,而不是其他的JAR文件。

如果以上的建议都无法解决问题,那么可能存在以下几种情况:

  1. 你的项目可能不是一个Spring Boot项目。如果你的项目不是Spring Boot项目,那么spring-boot-maven-plugin可能无法正确地打包你的应用。你可以检查你的pom.xml文件,确保它包含了Spring Boot的父POM和依赖。

  2. 你可能在pom.xml文件中重写了Spring Boot Maven插件的默认配置。例如,如果你设置了<packaging>war</packaging>,那么Maven将会生成一个WAR文件,而不是一个JAR文件。或者,如果你在spring-boot-maven-plugin的配置中设置了<layout>ZIP</layout>,那么插件将会生成一个ZIP布局的文件,而不是一个JAR布局的文件。

  3. 你可能在使用一个不兼容的Maven或Java版本。Spring Boot 2.x需要Java 8或更高版本,以及Maven 3.3或更高版本。你可以通过在命令行中运行java -versionmvn -v来检查你的Java和Maven版本。

  4. 你的项目可能有其他的Maven插件,这些插件可能影响了spring-boot-maven-plugin的行为。你可以检查你的pom.xml文件,看看是否有其他的插件可能影响到打包过程。

  5. 你的项目可能有其他的问题,这些问题导致了spring-boot-maven-plugin无法正确地打包你的应用。你可以查看Maven的输出,看看是否有其他的错误或警告信息。

如果以上的建议都无法解决问题,那么你可能需要寻求专业的帮助,例如在Stack Overflow上提问,或者联系Spring Boot的支持团队。在你寻求帮助时,记得提供尽可能多的信息,例如你的pom.xml文件,你的Maven和Java版本,以及你在运行Maven命令时看到的完整输出。

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值