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

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

SpringBoot maven项目打jar包启动报错没有主清单属性_第1张图片我的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 目标执行,如以下示例所示:


    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
                
                    
                        repackage
                    
                
            
        
    
重点

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): 


	org.springframework.boot
	spring-boot-starter-parent
	2.6.3

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


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    

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


    
        
            
            org.springframework.boot
            spring-boot-dependencies
            2.6.3
            pom
            import
        
    

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

你可能感兴趣的:(jar,maven,spring,boot)