一、什么是fat、thin jar
springBoot项目可以运行java -jar xxx.jar 来启动,默认情况下它会把所有的依赖都打到一个jar里面,称作fat jar。但是一般情况下很多外部依赖的jar大多数不可变,若是每次的jar都是很大,势必在网络不好的情况下上传到服务器很慢。基于此,我们可以利用maven的2个插件也可以打出thin jar。
备注:java -jar xx.jar 是java自带的命令,和sprignBoot没半毛钱关系,因此我们只需要按照这个jar文件的规范,也可以将任何项目打包成可执行的jar。
二、MANIFEST.MF 文件
每一个jar包下面都谁有它,可见其重要性,它列出了jar包一些信息/清单。
- 正常的springBoot可执行jar
1 | Manifest-Version: 1.0 |
- mvn-jar-plugin 插件打出来的可执行jar
1 | Manifest-Version: 1.0 |
三、springBoot 可执行jar的maven插件
1 | <plugin> |
这里我们直接给出springboot提供好的插件,就可以打出可执行的jar。注意若我们的工程没有继承spring-boot-starter-parent(这里面有了repackage 这个阶段),则还需要在上述的插件里面加个repackage,它就是将jar包可执化的关键。
四、maven-jar-plugin+maven-dependency-plugin 插件
1 | <plugin> |
maven-jar-plugin 插件可以指定主程序入口,和可搜索的类路径。
dependency-plugin 主要用于依赖的copy,瘦身jar。
有兴趣的朋友可以研究下springBoot 启动的原理,它是怎么使用org.springframework.boot.loader.JarLauncher 来找到我们的启动类,完成程序的启动的。