一.引言
使用 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
|