Java Maven 中怎么通过 dependency:analyze 找出项目中未使用的冗余依赖

舞夢輝影

舞夢輝影

2026-08-03

797人浏览

原创

mvn dependency:analyze 可识别未被引用的编译范围依赖,但需先编译、结合配置(如 ignorenoncompile、ignoreddependencies)并人工验证后才能安全移除冗余项。

java maven 中怎么通过 dependency:analyze 找出项目中未使用的冗余依赖

使用 mvn dependency:analyze 是识别项目中未被实际引用的依赖(即“冗余依赖”)的有效方式,但它默认行为较保守——只报告**编译范围(compile)下未被任何类引用、且未被其他依赖传递引入**的依赖。要真正找出可安全移除的冗余项,需结合正确配置和人工验证。

确保项目能正常编译并有足够覆盖率

该插件分析的是已编译的 class 文件中的字节码引用,因此:

  • 必须先执行 mvn compile(或直接运行 mvn dependency:analyze,它会自动触发编译)
  • 测试代码中的引用默认不计入(除非启用 ignoreNonCompile 为 false),所以单元测试里用到的依赖不会被误报为“未使用”
  • 若项目逻辑分支多、但测试覆盖低,某些依赖可能仅在特定运行时路径中被加载(如反射、SPI、配置驱动),此时插件无法发现,会误判为冗余

运行基础分析命令并理解输出含义

在项目根目录执行:

mvn dependency:analyze

关键输出包括两部分:

  • Used undeclared dependencies:已在代码中使用,但未在 pom.xml 中声明 → 需补全依赖(否则构建可能失败)
  • Unused declared dependencies:在 pom.xml 中声明了,但编译后没发现任何 class 引用它 → 这就是潜在的冗余依赖

注意:插件默认忽略 testprovidedruntime 范围的依赖分析,所以像 slf4j-api(常为 compile)或 spring-boot-starter-testtest)不会出现在 unused 列表中。

Java JDK 25
Java JDK 25

Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。

下载

增强分析精度的常用配置

pom.xmlpluginManagement 或直接配置插件时,可添加以下参数提升实用性:

  • <failonwarning>false</failonwarning>:避免因发现 unused 依赖而中断构建(默认 true)
  • <ignorenoncompile>false</ignorenoncompile>:把 test 范围的引用也纳入分析(适合想清理测试依赖时)
  • <ignoreddependencies></ignoreddependencies>:显式排除已知必要但静态分析无法捕获的依赖(如通过 Class.forName() 加载的 JDBC 驱动)
  • <ignoreduseddeclareddependencies></ignoreduseddeclareddependencies>:跳过某些已声明且被使用、但你不想让插件检查的依赖(较少用)

示例片段:

<plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-dependency-plugin</artifactid><version>3.6.1</version><configuration><failonwarning>false</failonwarning><ignorenoncompile>true</ignorenoncompile><ignoreddependencies><ignoreddependency>com.h2database:h2</ignoreddependency><ignoreddependency>org.springframework.boot:spring-boot-starter-web</ignoreddependency></ignoreddependencies></configuration></plugin>

人工确认 + 安全移除流程

插件结果只是线索,不能直接删。建议按以下步骤操作:

  • Unused declared dependencies 列表中挑出一个依赖(优先选 scope=compile、非 spring-boot-starter 类的)
  • pom.xml 中注释或删除该依赖项
  • 运行 mvn compilemvn test,确认无编译错误、测试全部通过
  • 如项目含集成测试或手动验证环节,再检查对应功能是否正常(例如删了 commons-lang3 后,是否仍有 StringUtils 调用未被发现)
  • 确认无误后再提交;若有问题,还原并标记为“动态加载/配置驱动”,加入 ignoredDependencies

不复杂但容易忽略

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

3864

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

2839

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

2877

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

637

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

602

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

726

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1317

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

18845

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

647

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

Java 26官方文档
Java 26官方文档

共0课时 | 0人学习