掘地攀登
100.61M · 2026-03-29
使用 开源 Java 诊断工具 Arthas ,通过 运行时类加载分析 ,100% 精准定位 SpringBoot 多模块项目中从未被使用的类,实现安全、无风险的代码清理。
curl(Mac/Linux 自带);在命令行执行一键命令,自动下载并连接 SpringBoot 进程:
curl -O https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar
执行后输入项目进程序号,回车即可进入 Arthas 控制台。
核心命令:仅扫描自定义包路径,过滤 JDK 系统类,直接导出到文件:
sc xx.xxx.xxxx.* > loaded_classes.txt
sc:Arthas 查看 JVM 已加载类的命令;xx.xxx.xxxx.*:替换为 项目的根包路径 ;loaded_classes.txt:运行时真正被使用的类清单。在项目根目录执行命令,自动扫描所有模块下的业务代码:
find . -name "*.java" -path "*/src/main/java/*" > all_classes.txt
将文件路径转换为 Java 全类名(包名。类名):
cat all_classes.txt | sed -E 's/.*src/main/java///g' | sed -E 's/.java$//g' | tr / . > all_classes_fullname.txt
执行命令,筛选出项目存在、但运行时从未加载的类:
grep -v -x -f loaded_classes.txt all_classes_fullname.txt > unused_classes.txt
打开 unused_classes.txt,里面的类就是可清理的冗余类。
即使工具检测为未使用,删除前必须遵循以下规则,保证 100% 安全:
@Service/@Component/@Controller/@Configuration 等;application.yml 中配置的类;Safe Delete,二次确认无引用后删除;# 输出文件 outfile="final_unused_classes.txt" rm -f $outfile touch $outfile # 逐行检查 while IFS= read -r cls; do [[ -z "$cls" ]] && continue echo "==================================================" echo "正在检查 → $cls" # 1. 检查是否有 import 完全匹配 has_import=$(grep -r "import $cls;" . --include="*.java" 2>/dev/null | wc -l) # 2. 检查是否有全类名使用(包名.类名) has_full_use=$(grep -r "b$clsb" . --include="*.java" 2>/dev/null | grep -v import | wc -l) # 3. 只有 完全没有 import + 完全没有全类名使用 → 才算真无用 if [[ $has_import -eq 0 && $has_full_use -eq 0 ]]; then echo " 真·无引用 → 可删除" echo "$cls" >> $outfile else echo " 存在引用 → 不删除" fi done < "unused_classes.txt" echo " ==================================================" echo " 检查完成!安全可删除的类已保存到:final_unused_classes.txt"
一天一个开源项目(第57篇):Unsloth - 2x 更快、70% 更省显存的 LLM 微调库
活用 Claude Code : 从协作者变成可编程的智能基础设施
2026-03-29
2026-03-29