Maven - 生成的 jar 包容量变大异常排查

简介: maven 打包 jar 包容量异常原因排查与解决。

 一.引言

使用 mvn package 打包时,对应项目 jar 包正常大小为 70 MB 左右,今天切换分支并简单修改代码后打包大小变为 120 MB 左右,遂开始排查之旅。

二.问题与纠错

1.问题定位

首先直接 vim 查看 jar 包内容,通过比较发现 70M 和 120M jar 包,二者主要相差在 静态文件 上,这些文件为之前版本 resource 文件夹内的文件。

image.gif编辑

所以第一步定位完成,jar 包容量增大是因为增加了很多 resource 文件夹内容。

2.问题分析

<resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                    <include>**/*</include>
                    <include>**/*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

image.gif

项目 maven 中配置了 resources 相关设置,所以 resources 文件夹内文件打到 jar 包为正常现象。经过比对发现新增文件均为之前 resources 文件夹内删除的文件 ,考虑到今天 git checkout 切换到了之前老的分支,而老分支的无关文件还未从 resources 文件夹中删除,因此老文件的引入是切换老分支导致的。

3.问题解决

解决这个问题只需要在新分支 mvn package 前执行 mvn clean,清除 target 文件,随后打包即可恢复新版本删除 resource 文件的小包情况。

未使用 mvn clean 打新包:

image.gif编辑

使用 mvn clean 打新包:

image.gif编辑

可以看到未 clean 的包打入 228 个 resources 文件,而 clean 的新版只打入 145 个文件,从而导致了 jar 包的变大。这里 mvn clean 的作用是清除 target 文件夹,由于 ignore 中添加了忽略 ./target,所以切换分支时 target 文件夹不受影响,而 maven 打包的资源来自 target 文件夹下的 class 文件夹:

image.gif编辑

切换老分支后打包就会保留老的 resources 文件到 classer 文件夹下,所以再切换新分支打包会依然使用 classes 文件夹从而导致 jar 包变大,mvn clean 命令清除 target 文件重新打新包时会将新包的  resources 文件 copy 到 target/class 文件夹下,所以新 jar 包容量变小。

三.总结

在 resources 文件夹修改的情况下,切换新老版本打包发生 jar 包容量异常增加时,执行下述命令即可解决:

mvn clean package

image.gif


目录
相关文章
|
3月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
3月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
11天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
30 3
|
3月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
3月前
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
3月前
|
Java Maven Windows
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
54 0
|
3月前
|
Java Maven
SpringBoot 引用仓库中没有 第三方包 - 将jar 包安装本地 maven
SpringBoot 引用仓库中没有 第三方包 - 将jar 包安装本地 maven
37 0
|
5月前
|
Java 关系型数据库 MySQL
Maven如何快捷导入jar包
Maven如何快捷导入jar包
|
13天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
64 8
|
1月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
121 1
Maven——创建 Spring Boot项目