accttodo
Maven知识点-插件maven-surefire-plugin (opens new window)
Maven 中 -DskipTests
和 -Dmaven.test.skip=true
是两种常用的跳过测试参数,但它们的执行机制和应用场景有显著区别。以下是基于最新信息的对比分析:
# 1. 核心区别
特性 | -DskipTests | -Dmaven.test.skip=true |
---|---|---|
测试代码编译 | ✅ 编译测试类到 target/test-classes | ❌ 完全跳过测试代码的编译 |
测试执行 | ❌ 不执行测试用例 | ❌ 不执行测试用例 |
影响的插件 | 仅 maven-surefire-plugin (单元测试插件)和 maven-failsafe-plugin (集成测试插件) | maven-compiler-plugin (编译插件)和测试插件 |
属性类型 | Maven 内置属性,无需声明 | 用户自定义属性,需在 pom.xml 显式配置(但命令行可直接覆盖) |
构建速度 | 较快(仅跳过执行) | 更快(跳过编译和执行) |
# 2. 适用场景
# -DskipTests
- 临时跳过测试执行:例如调试代码时,需确保测试代码编译通过但暂时不运行测试。
- 保留测试类:适用于需要后续手动运行测试或生成测试报告的场景。
- 命令行示例:
mvn install -DskipTests
1
# -Dmaven.test.skip=true
- 完全跳过测试阶段:适用于生产环境构建或测试代码存在严重问题导致编译失败时。
- 节省编译时间:跳过测试代码编译,显著加快构建速度。
- 命令行示例:
mvn install -Dmaven.test.skip=true
1
# 3. 其他注意事项
- 优先级:若同时使用两个参数(如
-Dmaven.test.skip=true -DskipTests=false
),-Dmaven.test.skip=true
优先级更高。 - POM 配置:
- 长期跳过测试建议通过
pom.xml
配置maven-surefire-plugin
:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> </plugin>
1
2
3
4
5
6
7 -Dmaven.test.skip=true
还需额外跳过编译插件:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin>
1
2
3
4
5
6
7
- 长期跳过测试建议通过
# 总结
- 快速验证代码功能 → 选择
-DskipTests
。 - 生产构建或测试代码异常 → 选择
-Dmaven.test.skip=true
。 - 长期配置 → 在
pom.xml
中通过插件参数控制。
如需进一步了解插件配置或集成测试跳过(如 -DskipITs
),可参考 Maven 官方文档或相关技术博客。