springBoot Maven 剔除无用的jar引用

目录

[Used undeclared dependencies found](#Used undeclared dependencies found)

[Unused declared dependencies found](#Unused declared dependencies found)


当项目经过一段时间的开发和维护后,经常会遇到项目打包速度变慢的问题。这通常与项目中包含大量的jar依赖有关,这些依赖之间的关系错综复杂。这种情况在项目维护过程中是非常常见的。由于开发人员在修复bug或开发新功能时,往往会简单地向项目中添加新的jar依赖,而没有对现有依赖进行清理或优化。因此,我们需要一种方法来分析项目中哪些jar依赖是真正被使用的,哪些依赖则可能已经不再需要,从而帮助我们优化项目结构,提高构建效率。

我们可以使用Maven analyze来进行分析,使用如下命令:

复制代码
mvn dependency:analyze

在idea的终端输入命令,则会输出如下的日志:

当你运行 mvn dependency:analyze 命令时,Maven 会对项目的依赖进行分析,并报告一些潜在的问题。日志中的Used undeclared dependencies found和Unused declared dependencies found是两个常见的警告信息。

Used undeclared dependencies found

Used undeclared dependencies found这个警告表示项目中使用了某些未在 pom.xml 文件中声明的依赖。但是它并不是直接的依赖(就是说没有在pom中直接声明),是通过引入传递下来的包。换句话说,项目中有一些类或资源是从这些未声明的依赖中引用的,但这些依赖没有被明确地添加到项目的依赖管理中。

举个例子:project在pom中声明了A.jar的依赖(没有声明B.jar的依赖) A.jar的依赖关系:A.jar -> B.jar 通过mvn dependency:analyze出现 [WARNING] Used undeclared dependencies found: B.jar 就说明project中的代码用到了B.jar的代码 这个时候你就可以把B.jar直接声明在pom中。

Unused declared dependencies found

Unused declared dependencies found这个警告表示项目中声明了一些没有被使用的依赖。换句话说,这些依赖在项目中没有任何引用或使用。

假设你在 pom.xml 中声明了一个依赖 com.example:example-lib,但在项目代码中并没有使用任何来自该库的类或资源。运行 mvn dependency:analyze 后,你会看到类似如下的警告:

复制代码
[WARNING] Unused declared dependencies found:
com.example:example-lib:jar:1.0.0:compile

但是这里我们需要注意: 这里说的实际代码没有用到指的是在main/java和test里没有用的但是并不是意味着真的没有用到这些包,有可能配置文件中引用或者其他扩展点自动加载这些包,所以我们在删除依赖的时候一定要小心,做好备份,因为这类引用maven是分析不出来的。

要注意的还有,这个检测的结果仅供参考,有时也不准确,如org.projectlombok:lombok:jar:1.16.20:provided,实际上在项目中有使用到它的注解@Data,这个属于误判。要注意剔除依赖后多测试,工具毕竟有毕竟的缺陷性。

对于这种,最好是先注释,测试没有问题的话再删除,这样也不用做备份,随时取消注释。

此外,我们在新项目建立时,引用jar包时要慎重,不要一股脑儿直接拷贝老项目的依赖,避免后期又花时间来剔除。

相关推荐
fouryears_234171 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~1 小时前
C#---StopWatch类
开发语言·c#
uzong2 小时前
技术故障复盘模版
后端
GetcharZp2 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程3 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen3 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研3 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi3 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
一只爱撸猫的程序猿4 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
甄超锋4 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat