springboot maven打包运行失败问题debug分析报告——XXX--1.0-SNAPSHOT.jar中没有主清单属性

问题:

 

解决方案

1.修改pom.xml文件的build标签为

该标签作用:

添加一个SpringBoot的构建的插件

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

结果:失败 分析:虽然查阅网上的资料以及官网的技术文档都给出上述解决方案,但是对于我这个demo还是不行

2.分析打包出来的jar包文件

原文:spring-xxx-xxx-0.0.1-SNAPSHOT.jar中没有主清单属性_dream_xz的博客-CSDN博客

2.1分析
1.在这里有一个问题就是主清单属性是什么?
以SpringBoot为例,jar包中包含了三个文件夹:BOOT-INF,META-INF,org,可以把jar包解压到文件夹下查看, 其中META-INF文件夹下有一个MANIFEST.MF文件,该文件指明了程序的入口以及版本信息等内容,如下 应为:

    Manifest-Version: 1.0
    Implementation-Title: spring-xxx-xxx
    Implementation-Version: 0.0.1-SNAPSHOT
    Archiver-Version: Plexus Archiver
    Built-By: XXXX
    Implementation-Vendor-Id: com.huyikang.practice
    Spring-Boot-Version: 1.5.9.RELEASE
    Implementation-Vendor: Pivotal Software, Inc.
    Main-Class: org.springframework.boot.loader.JarLauncher
    Start-Class: com.huyikang.practice.eureka.Application
    Spring-Boot-Classes: BOOT-INF/classes/
    Spring-Boot-Lib: BOOT-INF/lib/
    Created-By: Apache Maven 3.5.2
    Build-Jdk: 1.8.0_151
    Implementation-URL: http://maven.apache.org

Main-Class代表了Spring Boot中启动jar包的程序
Start-Class属性就代表了Spring Boot程序的入口类,这个类中应该有一个main方法
Spring-Boot-Classes代表了类的路径,所有编译后的class文件,以及配置文件,都存储在该路径下
Spring-Boot-Lib表示依赖的jar包存储的位置
这些值都是SpringBoot打包插件会默认生成的,如果没有这些属性,SpringBoot程序自然不能运行,就会报错:jar中没有主清单属性,也就是说没有按照SpringBoot的要求,生成这些必须的属性。

而我运行失败的jar包文件结构为

解压:springboot_profiles-0.0.1-SNAPSHOT.jar

springboot maven打包运行失败问题debug分析报告——XXX--1.0-SNAPSHOT.jar中没有主清单属性_第1张图片
  其中的MANIFEST.MF文件为:

Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.2.2
Build-Jdk-Spec: 16
Implementation-Title: springboot_profiles
Implementation-Version: 0.0.1-SNAPSHOT

显然,我打包出来的jar包存在问题,或者说我的这个打包插件有问题,亦或者打包方式存在问题

2.2.成功的jar包以及运行
借用黑马的代码进行分析
成功打包运行成功的的MANIFEST.MF文件内容为

Manifest-Version: 1.0
Implementation-Title: springboot-profiles
Implementation-Version: 0.0.1-SNAPSHOT
Start-Class: com.itheima.springbootprofiles.SpringbootProfilesApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.1.8.RELEASE
Created-By: Maven Archiver 3.4.0
Main-Class: org.springframework.boot.loader.JarLauncher

运行: springboot maven打包运行失败问题debug分析报告——XXX--1.0-SNAPSHOT.jar中没有主清单属性_第2张图片

 

3.使用mvn package打包

 运行:  

springboot maven打包运行失败问题debug分析报告——XXX--1.0-SNAPSHOT.jar中没有主清单属性_第3张图片

 

MANIFEST.MF文件内容为

Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.2.2
Build-Jdk-Spec: 16
Implementation-Title: springboot_profiles
Implementation-Version: 0.0.1-SNAPSHOT
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.example.springboot_profiles.SpringbootProfilesApplicati
 on
Spring-Boot-Version: 2.7.5
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx

所以,结果显而易见,之前使用maven的插件打包存在问题

4.修改打包方式

修改pom.xml文件的build标签

5.配置打包插件


    
        

            
            
                org.apache.maven.plugins
                maven-jar-plugin
                3.1.0
                
                    
                        
                            true
                            lib/
                            com.test.api.MyMain
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                3.1.1
                
                    
                        copy-dependencies
                        package
                        
                            copy-dependencies
                        
                        
                            ${project.build.directory}/lib
                        
                    
                
            

        
    

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