SpringBoot maven项目打jar包启动报错没有主清单属性

这个问题网上搜索已经有很多回答,基本就是用压缩软件打开jar包,jar包的结构不是如下结构。

我的jar包进来就是BOOT-INF\classes下的内容,而jar包启动是要依靠META-INF\MANIFEST.MF文件,该文件指明了程序的入口以及版本信息等内容。

Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Archiver-Version: Plexus Archiver
Built-By: xxxxx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Start-Class: com.xxx.xxxApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.6.3
Created-By: Apache Maven 3.6.3
Build-Jdk: 1.8.0_212
Main-Class: org.springframework.boot.loader.JarLauncher

###主要条目说明
# Main-Class代表了Spring Boot中启动jar包的程序
# Start-Class属性就代表了Spring Boot程序的入口类,这个类中应该有一个main方法
# Spring-Boot-Classes代表了类的路径,所有编译后的class文件,以及配置文件,都存储在该路径下
# Spring-Boot-Lib表示依赖的jar包存储的位置

 解决办法就是maven pom文件中可以配置spring-boot-maven-plugin插件,但是怎么配网上文章都雷同且没有说清楚,一直不生效,最后还是在Spring官网找到解决办法。

参考链接:Spring Boot Maven Plugin Documentation

 重要部分翻译如下:

打包可执行程序

该插件(spring-boot-maven-plugin)可以将所有应用依赖的文件打成可执行程序(jar包或war包),并可通过java -jar运行

打包可执行文件由 repackage 目标执行,如以下示例所示:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
重点

If you are using spring-boot-starter-parent, such execution is already pre-configured with a repackage execution ID so that only the plugin definition should be added.

意思就是如果你是通过继承spring-boot-starter-parent来使用Springboot(3.1. Inheriting the Starter Parent POM): 

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.6.3</version>
</parent>

那么repackage这个配置已经预先配置好了,所以不需要再配置,就是网上贴的最多的如下插件配置方式:

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

但是我项目使用Springboot的方式是:(3.2. Using Spring Boot without the Parent POM

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.6.3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

所以我必须在plugin的配置上加入repackage这个配置才能成功。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值