包总是太大?maven一个配置教你瘦身

包总是太大?maven一个配置教你瘦身

viEcho Lv5

微服务项目越来越多,特别是一个父工程下有多个子工程这种,每次打包都发现一个包都有40~50M;但是实际上有的项目代码是没有多少的,那为什么打完包后还是有这么大呢?

其实是因为打成的包是一个可执行的jar,对应的依赖jar也被打包进去了。但是对于我们来说,若是其实项目的依赖的jar就那么多,我们能不能打包单个微服务时,不将这些依赖的jar打包进去,而是在项目运行启动的时候指定依赖jar的地址让其运行就可以了呢?

答案是肯定的,maven改写下配置文件即可实现。话不多说,我们开始:

直接执行打包

这里以一个开源的项目bootdo为例,直接执行打包
88M

我们可以解压看下,其实就是因为依赖的jar包被打包进去了,才会有88M之多!
我们将打包后的这个文件夹改名增加后缀“_old”,并且文件夹类型改为zip后,再使用命令

1
unzip -d bootdo-2.0.0_old bootdo-2.0.0_old.zip

如下图所示:

我们点开解压后的文件,可以看到项目依赖的jar包都在BOOT-INF/lib下;

更改mvn打包配置

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
26
27
28
29
30
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
<fork>true</fork>
<!-- spring-boot:run 中文乱码解决 -->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<mainClass>com.bootdo.BootdoApplication</mainClass>
<layout>ZIP</layout>
<!--注:若是有子工程这样添加进来,我这里bootdo就是一个单独的工程所以这里我只添加一个 -->
<includes>
<include>
<groupId>com.bootdo</groupId>
<artifactId>bootdo</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

添加这些配置后,我们再次打包看下大小(注:直接package,不要clean,不然你解压的jar后面指定不了!):
22M
可以看到,我们打完包后只有22M的一个大小了,因为本项目包含了很多静态文件,例如图片图标啥的(其实这些都可以无损压缩下的)所以还是有20M多,但是基本已经是以前的1/4大小了;

如何启动

很明显,我们直接运行现在的jar包是无法运行的,我们必须告诉编译器项目运行jar的位置

1
java -Dloader.path=./bootdo-2.0.0_old/BOOT-INF/lib/ -jar bootdo-2.0.0.jar

如下图所示,我们指定了mvn其他依赖的位置后,就可以启动此项目了;

小结:这是我本地的演示,那么实际到项目上时,我们可以第一次打包将需要的jar包放到指定的位置,后面jenkin打包或手动启动时,指定路径即可。是不是很简单,那就赶快尝试下吧!

  • Title: 包总是太大?maven一个配置教你瘦身
  • Author: viEcho
  • Created at : 2021-04-23 19:55:09
  • Updated at : 2024-01-18 14:56:06
  • Link: https://viecho.github.io/2021/0423/maven-package-to-small.html
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
包总是太大?maven一个配置教你瘦身