我们发现Spring Boot用起来非常方便,但是即使新建的空项目打包jar之后也要14M大小,将jar包解压发现BOOT-INF/lib
大小就占到13.6M.我们对Springboot打包jar瘦身就是从包内将 lib
分离出来,因为对于项目而言架构确定后,引入的三方jar包基本就不会变动了;要是有新增库那就将新增的三方库分离出来就好啦。
分离出lib依赖三方库
pom.xml文件的build节点 可能是如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>top.sogrey.HelloApplication</mainClass> <layout>ZIP</layout> </configuration> </plugin> </plugins> </build>
|
分离前我们需要通过常用的打包命令:
1 2
| Maven ckean Maven install
|
从target
目录下拿到完整的jar包(14M),解压,将BOOT-INF/lib
另存。
修改pom.xml配置,编译出不带 lib 文件夹的Jar包
修改后的pom.xml文件的build节点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>top.sogrey.HelloApplication</mainClass> <layout>ZIP</layout> <includes> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> </plugin> </plugins> </build>
|
再次执行打包命令得到不带lib的jar包,大小才98k.
这时将之前分离出来的lib目录与不含lib的jar放在同一目录下,最终目录结构如下:
最终目录文件结构是:
1 2 3 4
| ├── lib #lib文件夹 | ├─ classmate-1.3.3.jar | └─ ... # 其他jar包 └── SpringBootDemo-0.0.1-SNAPSHOT.jar
|
执行命令:
1
| $ java -Dloader.path=lib -jar SpringBootDemo-0.0.1-SNAPSHOT.jar
|
完整的jar包启动命令:
1
| $ java -jar SpringBootDemo-0.0.1-SNAPSHOT-FULL.jar
|
参考