mvn clean 默认删除项目根目录下target文件夹及其全部内容,包括classes、test-classes、generated-sources、surefire-reports、jar/war包等构建产物,但不删除src、resources、pom.xml及本地仓库。

当你执行 mvn clean 时,Maven 并不是随便删几个文件,而是严格按约定清除 target 目录下所有由构建过程生成的产物——这些文件若残留,可能引发类版本冲突、打包内容错乱或测试结果误判。
clean 命令实际删除的目录和文件类型
默认情况下,【clean 只操作项目根目录下的 target/ 子目录,不碰 src/、resources/、pom.xml 或本地仓库 ~/.m2/repository】。它删除的是整个 target 文件夹及其全部内容,包括但不限于:
• classes/ 和 test-classes/:Java 源码编译生成的所有 .class 文件(含模块信息、注解处理器输出);
• generated-sources/:由 annotation processor、protobuf、JAXB 等插件生成的 Java 源码;
• generated-resources/:如 filtered-resources 处理后的配置文件、模板引擎渲染结果;
• surefire-reports/ 和 failsafe-reports/:单元测试与集成测试的 XML 报告及截图;
• site/:通过 maven-site-plugin 生成的项目文档(含 Javadoc 链接、依赖图);
• *.jar、*.war、*.ear:上一次 mvn package 生成的归档包;
• tmp/、dependency/(由 dependency:copy 引入)、archive-tmp/:各类插件临时产出目录。
哪些内容不会被 clean 删除
clean 是“只清构建产物”的守门人,它明确回避以下三类内容:
• 项目源码:src/main/java、src/test/java、src/main/resources 全部保留;
• 构建配置:pom.xml、settings.xml、profiles.xml 不受影响;
• 本地依赖缓存:~/.m2/repository 中已下载的 jar 包、pom 文件、校验文件完全不动;
• IDE 特有文件:.idea/、.project、.classpath、.vscode/ 等开发环境元数据不参与清理。
这一步设计得非常克制——删得干净,但绝不越界。
验证 clean 是否真正生效的实操方法
第一步:执行 mvn clean 后,立即运行 ls -la target(Linux/macOS)或 dir target(Windows);
第二步:观察终端是否报错 “No such file or directory”;
第三步:若 target 目录仍存在,说明你当前不在项目根目录(即 pom.xml 所在目录),或者 pom.xml 中自定义了 <directory> 路径;
第四步:打开文件管理器,确认 target 文件夹图标是否消失——只要它还在,就不是 clean 生效了,而是命令没跑对位置。
注意:【Windows 下若提示“访问被拒绝”,大概率是 IntelliJ 正在热加载 class,或某个 JVM 进程锁住了 target/classes 中的 .class 文件】,此时需关闭调试会话再重试。
不同场景下 clean 的实际影响差异
方法一:单独运行 mvn clean
→ 仅删除 target 目录,不触发任何编译或测试;
→ 最轻量级清理,适合修复因 class 文件残留导致的 NoClassDefFoundError。
方法二:组合命令 mvn clean compile
→ 先删 target,再重新编译 src/main/java 下所有 .java 文件到 target/classes;
→ 不运行测试,但确保字节码与当前源码完全一致。
方法三:高频构建场景用 mvn clean package -Dmaven.test.skip=true
→ 清理 + 编译 + 打包(跳过测试编译与执行);
→ 适用于快速验证打包结构是否正确,比如检查 MANIFEST.MF 或依赖是否打入 fat-jar。


















