哈喽,大家好,编程周记今天给大家分享SpringBoot的打包细节。
我们都知道SpringBoot打包插件是:
<build>
<plugins>
<!-- spring-boot-maven-plugin插件就是打包spring boot应用的 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins
</build>
既然知道是这个,为什么会打包失败呢?
打包出来不是SpringBoot结构。
一、SpringBoot Jar包结构
怎么看jar包结构?
1、 解压出来;
2、 压缩软件压缩打开;
目录结构介绍一下吧!
BOOT-INF/classes 是本工程类文件和yml配置文件。
BOOT-INF/lib 是依赖包文件夹,通常查看jar包是否正常打包,就看这里。
BOOT-INF/classpath.idx 是jar的加载顺序。
META-INF/MANIFEST.MF 定义启动入口和启动类。
META-INF/maven/..*/pom.xml 项目的pom文件。
org包含了SpringBoot的类加载器
值得注意的是除了打印出SpringBoot可执行jar包之外,插件还会打印原始jar
包。
xx*.jar.original
二、SpringBoot打包失败的情况
回归正题:什么情况下打包失败??
1、 未添加
<build>
<plugins>
<!-- spring-boot-maven-plugin插件就是打包spring boot应用的 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins
</build>
什么情况下可以不加
2、 有时候没替换原始jar,也会导致生成失败;
解决方式:添加
<plugin>
<!-- springboot maven 编译插件,可生成可执行 jar,并使 springboot-devtools 生效 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<!-- 是否替换原始 jar,重新生成一个 xx*.jar.original -->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
3、 包围在
这个就跟dependencyManagement的作用差不多,并不实际引入。
职场经验
《永远不要主动揽活,不要写不属于自己任务范围的代码,否则,它将成为你的额外任务和永久运维者。》