一.引言
使用 mvn package 打包时,对应项目 jar 包正常大小为 70 MB 左右,今天切换分支并简单修改代码后打包大小变为 120 MB 左右,遂开始排查之旅。
二.问题与纠错
1.问题定位
首先直接 vim 查看 jar 包内容,通过比较发现 70M 和 120M jar 包,二者主要相差在 静态文件 上,这些文件为之前版本 resource 文件夹内的文件。
编辑
所以第一步定位完成,jar 包容量增大是因为增加了很多 resource 文件夹内容。
2.问题分析
<resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> <include>**/*</include> <include>**/*</include> </includes> <filtering>false</filtering> </resource> </resources>
项目 maven 中配置了 resources 相关设置,所以 resources 文件夹内文件打到 jar 包为正常现象。经过比对发现新增文件均为之前 resources 文件夹内删除的文件 ,考虑到今天 git checkout 切换到了之前老的分支,而老分支的无关文件还未从 resources 文件夹中删除,因此老文件的引入是切换老分支导致的。
3.问题解决
解决这个问题只需要在新分支 mvn package 前执行 mvn clean,清除 target 文件,随后打包即可恢复新版本删除 resource 文件的小包情况。
未使用 mvn clean 打新包:
编辑
使用 mvn clean 打新包:
编辑
可以看到未 clean 的包打入 228 个 resources 文件,而 clean 的新版只打入 145 个文件,从而导致了 jar 包的变大。这里 mvn clean 的作用是清除 target 文件夹,由于 ignore 中添加了忽略 ./target,所以切换分支时 target 文件夹不受影响,而 maven 打包的资源来自 target 文件夹下的 class 文件夹:
编辑
切换老分支后打包就会保留老的 resources 文件到 classer 文件夹下,所以再切换新分支打包会依然使用 classes 文件夹从而导致 jar 包变大,mvn clean 命令清除 target 文件重新打新包时会将新包的 resources 文件 copy 到 target/class 文件夹下,所以新 jar 包容量变小。
三.总结
在 resources 文件夹修改的情况下,切换新老版本打包发生 jar 包容量异常增加时,执行下述命令即可解决:
mvn clean package