如何检测使用spring-boot-starter-*的Spring Boot项目中未使用的Maven依赖?
检测Spring Boot项目中可移除Maven依赖的实用方案
针对你遇到的mvn dependency:analyze对Spring Boot Starter支持不佳、depclean-maven-plugin不兼容Java 21的问题,以下是几个可行的替代方案:
1. 调整Maven Dependency Analyzer的配置
原生的dependency:analyze并非完全不可用,通过针对性配置可以过滤掉Spring Boot Starter的干扰:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.1</version> <executions> <execution> <phase>verify</phase> <goals> <goal>analyze-only</goal> </goals> <configuration> <!-- 忽略测试范围的依赖分析 --> <ignoreTestScope>true</ignoreTestScope> <!-- 忽略非编译范围的依赖(如runtime、provided) --> <ignoreNonCompile>true</ignoreNonCompile> <!-- 手动排除Spring Boot Starter这类聚合依赖的误报 --> <ignoredDependencies> <ignoredDependency>org.springframework.boot:spring-boot-starter-web</ignoredDependency> <ignoredDependency>org.springframework.boot:spring-boot-starter-data-jpa</ignoredDependency> <!-- 按需添加其他Starter --> </ignoredDependencies> </configuration> </execution> </executions> </plugin>
配置后运行mvn dependency:analyze-only,会更精准地识别真正未被代码引用的直接依赖。
2. 使用JDeps Maven插件做字节级分析
JDeps是JDK自带的依赖分析工具,能从字节码层面检测类的引用关系,对Spring Boot的反射场景也有一定适配性。可以通过jdeps-maven-plugin集成:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jdeps-maven-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>verify</phase> <goals> <goal>jdkinternals</goal> <goal>analyze</goal> </goals> <configuration> <!-- 输出未使用的依赖 --> <verbose>true</verbose> <!-- 排除Spring Boot自动配置类的干扰 --> <exclude>org.springframework.boot.autoconfigure.**</exclude> </configuration> </execution> </executions> </plugin>
运行mvn jdeps:analyze后,会在控制台输出未被引用的依赖类,你可以据此排查对应的Maven依赖是否可移除。
3. 利用IDE的内置工具(推荐)
IntelliJ IDEA或Eclipse都有成熟的依赖分析功能,以IDEA为例:
- 打开项目的
pom.xml,切换到Dependency Analyzer标签页 - 开启「Show unused dependencies」选项,IDEA会自动标记未被代码直接或间接引用的依赖
- 对于Spring Boot Starter,IDEA能识别其传递依赖的使用情况,避免误判聚合依赖
这种方式操作直观,且能实时反馈依赖使用状态,适合日常开发中逐步清理依赖。
4. 使用maven-dependency-check-plugin的辅助排查(间接方式)
虽然该插件主要用于漏洞检测,但它生成的依赖树报告可以帮你梳理依赖关系:
运行mvn dependency-check:check,会生成HTML报告,其中包含完整的依赖层级,你可以结合代码引用情况,手动排查冗余依赖。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

