当前位置: 首页 > news >正文

Maven 中 maven.test.skip 与skipTests 区别

在 Maven 中,maven.test.skipskipTests 都用于控制测试的跳过行为,但它们的作用范围底层机制有显著区别。以下是详细对比:


1. maven.test.skip

定义

maven.test.skip 是一个用户自定义属性(需在 pom.xml<properties> 中显式声明),通常由插件(如 maven-surefire-pluginmaven-compiler-plugin)读取。

作用
  • 跳过测试代码的编译和执行
    当设置为 true 时:
    • maven-compiler-plugin 不会编译 src/test/java 下的测试代码。
    • maven-surefire-plugin 不会执行任何测试。
配置示例
<properties>
    <maven.test.skip>true</maven.test.skip> <!-- 默认 false -->
</properties>
命令行覆盖
mvn install -Dmaven.test.skip=true
适用场景
  • 需要完全跳过测试的编译和执行(节省时间,适用于 CI/CD 中的快速构建)。

2. skipTests

定义

skipTests 是 Maven 的内置属性,直接由 maven-surefire-plugin(测试执行插件)和 maven-failsafe-plugin(集成测试插件)识别,无需在 pom.xml 中声明。

作用
  • 仅跳过测试执行,但会编译测试代码
    当设置为 true 时:
    • 测试代码(src/test/java)仍会被编译。
    • 测试类不会被执行。
配置示例
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.2.5</version>
    <configuration>
        <skipTests>true</skipTests> <!-- 默认 false -->
    </configuration>
</plugin>
命令行覆盖
mvn install -DskipTests=true
适用场景
  • 需要编译测试代码但临时跳过执行(例如调试时保留测试代码)。

核心区别对比

特性maven.test.skipskipTests
作用范围跳过测试代码的编译和执行仅跳过测试执行(测试代码仍会编译)
属性类型用户自定义属性(需在 pom.xml 声明)Maven 内置属性(无需声明)
影响的插件maven-compiler-plugin + maven-surefire-pluginmaven-surefire-plugin / maven-failsafe-plugin
编译测试代码❌ 不编译✅ 编译
执行测试❌ 不执行❌ 不执行
推荐使用场景完全跳过测试(如生产环境构建)临时跳过测试(如调试或快速验证)

如何选择?

  1. 需要完全跳过测试(不编译、不执行)

    mvn install -Dmaven.test.skip=true
    
  2. 需要编译测试代码但跳过执行

    mvn install -DskipTests=true
    
  3. pom.xml 中永久配置

    • 如果希望默认跳过测试,建议使用 skipTests(语义更明确):
      <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
              <skipTests>true</skipTests>
          </configuration>
      </plugin>
      

常见问题

Q1:两者能否同时使用?

可以,但 maven.test.skip 优先级更高(会覆盖 skipTests 的效果)。例如:

mvn install -Dmaven.test.skip=true -DskipTests=false

最终结果仍是跳过编译和执行

Q2:如何仅跳过集成测试?

使用 skipITs 属性(需配合 maven-failsafe-plugin):

mvn verify -DskipITs=true

通过理解两者的区别,你可以更精准地控制 Maven 构建过程中的测试行为。

相关文章:

  • 实战 | 基于 SpringBoot + UniApp 打造国际版打车系统:架构设计与性能优化全解析
  • 关于ArcGIS中加载影像数据,符号系统中渲染参数的解析
  • nccl的框架结构图 (来自deepseek)
  • QT学习笔记(进程与多线程)
  • 线程池详解:在SpringBoot中的最佳实践
  • 16个气象数据可视化网站整理分享
  • 安科瑞Acrel-2000ES储能能量管理为储能柜厂家赋能未来能源
  • 甘肃旅游服务平台+论文源码视频演示
  • 应用于汽车车灯电路中的电感产品选型及质量管控标准
  • ssh: connect to host github.com port 22: Connection timed out
  • 金融交易平台该如何选择服务器
  • WHAT - 程序员英语之美式发音学习系列(四)
  • 鸿蒙Flutter实战:20. Flutter集成高德地图,同层渲染
  • 老是忘记package.json,备忘一下 webpack 环境下 Vue Cli 和 Vite 命令行工具对比
  • SpringMVC请求和响应
  • 只出现一次的数字(js实现,LeetCode136)
  • Vue 中使用 ECharts
  • IntelliJIDEA中实现Spring Boot多实例运行:修改配置与批量启动详解
  • How to install vmware workstation pro on Linux mint 22
  • 在 spring tool suite 如何安装 lombok
  • 饿了么网站开发/竞价推广营销
  • 心悦dnf免做卡网站/seo推广专员招聘
  • 了解网站基本知识/百度提交收录入口
  • 网站空间自己做/最近的疫情情况最新消息
  • 新闻网站开发课程设计模板/淘宝seo是什么
  • wordpress仪表盘访问不了/搜索引擎营销与seo优化