使用 Arthas 精准排查 SpringBoot 多模块项目中未使用的类(安全清理无用代码)

使用 开源 Java 诊断工具 Arthas ,通过 运行时类加载分析 ,100% 精准定位 SpringBoot 多模块项目中从未被使用的类,实现安全、无风险的代码清理。

一、为什么选择 Arthas?

  1. 运行时精准检测 :只统计项目启动后实际被 JVM 加载的类,规避静态检测的误判问题;
  2. 适配多模块项目:完美支持微服务、多模块聚合工程,无需修改源码、无需引入 Maven 插件;
  3. 零侵入、无风险:不修改项目代码、不影响运行环境,测试 / 生产环境均可使用;
  4. 彻底解决盲区:能识别 MyBatis Mapper、动态注入 Bean、反射调用类,杜绝误删。

前置准备

  1. 已启动 SpringBoot 多模块项目(本地 / 测试环境均可);
  2. 安装 curl(Mac/Linux 自带);
  3. 打开项目 根目录 的命令行终端。

二、实战步骤

步骤 1:下载并启动 Arthas

在命令行执行一键命令,自动下载并连接 SpringBoot 进程:

arduino 复制代码
curl -O https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar

执行后输入项目进程序号,回车即可进入 Arthas 控制台。

步骤 2:导出项目「运行时已加载的业务类」

核心命令:仅扫描自定义包路径,过滤 JDK 系统类,直接导出到文件:

复制代码
sc xx.xxx.xxxx.* > loaded_classes.txt
  • sc:Arthas 查看 JVM 已加载类的命令;
  • xx.xxx.xxxx.*:替换为 项目的根包路径
  • loaded_classes.txt:运行时真正被使用的类清单。

步骤 3:导出多模块项目「所有 Java 类」

项目根目录执行命令,自动扫描所有模块下的业务代码:

lua 复制代码
find . -name "*.java" -path "*/src/main/java/*" > all_classes.txt

步骤 4:格式转换(统一类名格式,用于对比)

将文件路径转换为 Java 全类名(包名。类名):

bash 复制代码
cat all_classes.txt | sed -E 's/.*src/main/java///g' | sed -E 's/.java$//g' | tr / . > all_classes_fullname.txt

步骤 5:对比生成「未使用类清单」

执行命令,筛选出项目存在、但运行时从未加载的类:

perl 复制代码
grep -v -x -f loaded_classes.txt all_classes_fullname.txt > unused_classes.txt

打开 unused_classes.txt,里面的类就是可清理的冗余类

三、安全删除规范(必看,杜绝删崩项目)

即使工具检测为未使用,删除前必须遵循以下规则,保证 100% 安全:

  1. 排除带 Spring 注解的类@Service/@Component/@Controller/@Configuration 等;
  2. 排除数据相关类:Entity、DTO、VO、Mapper、枚举、常量类;
  3. 排除配置文件引用类application.yml 中配置的类;
  4. IDEA 安全删除 :右键类 → Safe Delete,二次确认无引用后删除;
  5. 验证:删除后重启项目,执行接口 / 单元测试,无报错则完成清理。

删之前要点一下类看看有没有地方引用,避免误删
OK,搞定,清理后感觉项目舒服多了,轻装上阵,嘿嘿

相关推荐
摇滚侠5 分钟前
JDBC 基础到高级一套通关!高级篇 28-40
java
掘金一周42 分钟前
问卷调查:如果现在收到裁员通知,你手里的现金流能支撑多久? | 沸点周刊6.4
前端·人工智能·后端
Smoothcloud润云1 小时前
5大功能精修,重构AI算力使用体验!
java·人工智能·windows·算法·重构·编辑器·sublime text
我是唐青枫1 小时前
Java MyBatis-Flex 实战指南:从 BaseMapper 到 QueryWrapper 的轻量 ORM 用法
java·开发语言·mybatis
顺风尿一寸1 小时前
Java Native 方法底层原理深度解析:从 JNI 注册到 Native Wrapper 生成
java
极客先躯1 小时前
高级java每日一道面试题-2026年01月18日-实战篇[Docker]-如何清理仓库中的旧镜像?
java·运维·docker·容器
JustHappy1 小时前
古法编程秘籍(四):函数究竟是什么?把函数最重要的能力一次讲清楚
前端·后端·面试
iiiiyu2 小时前
IO流(二)
java·开发语言·数据结构·编程语言
白露与泡影2 小时前
牛客网大厂Java面试题全集(2026版,附答案)
java·开发语言
_Evan_Yao2 小时前
一文搞懂:Git分支管理与团队协作规范——从GitFlow到GitHub Flow,从rebase到merge,打造高效协作流
java·git·后端·github