maven中跳过测试有两种方式:maven.test.skip=true完全跳过测试编译与执行,skiptests仅跳过执行但保留编译;强制运行测试需显式设-dskiptests=false或-dmaven.test.skip=false。

在 Maven 中跳过测试或强制执行测试规则,主要通过命令行参数和 pom.xml 配置两种方式实现,关键在于区分 skipTests 和 maven.test.skip 的行为差异,以及如何在 CI/CD 或本地构建中合理控制测试阶段。
跳过测试编译与执行(maven.test.skip=true)
设置 maven.test.skip=true 会**完全跳过测试的编译和运行**,即不编译 src/test/java 下的代码,也不执行 test 生命周期阶段。适合快速构建、调试主代码逻辑,或明确不需要任何测试参与的场景。
- 命令行使用:
mvn clean package -Dmaven.test.skip=true -
pom.xml中配置(不推荐长期写死,仅用于特定 profile):
true - 注意:跳过编译意味着测试类不会出现在
target/test-classes,某些依赖测试类的插件(如 JaCoCo 的 test-report)可能报错或无数据。
仅跳过测试执行但保留编译(skipTests)
设置 skipTests(即 -DskipTests)会**编译测试代码,但跳过 surefire:test 执行**。这是更安全的跳过方式,尤其适用于需要生成测试报告结构、或后续步骤(如集成测试、覆盖率分析)仍需测试类字节码的场景。
- 命令行使用:
mvn clean package -DskipTests - 该参数默认为
false,显式设为true即可生效(-DskipTests=true等价) - 与
maven.test.skip不同,它不影响test-compile阶段,所以target/test-classes依然存在。
强制执行测试(绕过跳过配置)
当项目全局或 profile 中设置了 skipTests 或 maven.test.skip,而你希望临时强制运行测试,只需**显式覆盖该属性为 false**:
mvn clean test -DskipTests=falsemvn verify -Dmaven.test.skip=false- 若 pom 中用
<configuration></configuration>在maven-surefire-plugin里设了skip,则需同时覆盖插件配置或改用命令行参数优先级更高的方式。
在 pom.xml 中统一控制测试行为
可在 pom.xml 的 maven-surefire-plugin 中声明式控制,便于团队统一规范:
- 默认跳过测试(开发阶段):
org.apache.maven.plugins
maven-surefire-plugin
true
- 启用失败时继续(非跳过,但增强容错):
true - 注意:插件级
skip和命令行-DskipTests共存时,命令行参数优先级更高。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











