maven编译【-Dmaven.test.skip=true和-DskipTests=true的区别】

06-15 1764阅读

1、背景

我在执行maven编译时,遇到下面情况:

1、当执行命令为下面:

mvn clean compile package install -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true -Drat.numUnapprovedLicenses=600 -DskipTests=true -pl=hdfs-agent -Pall -Pbuild-repo

发现还是会编译测试模块的代码,如下图:

maven编译【-Dmaven.test.skip=true和-DskipTests=true的区别】

2、而变成下面命令时,便不会编译测试模块的代码了

mvn clean compile package install -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true -Drat.numUnapprovedLicenses=600 -Dmaven.test.skip=true -pl=hdfs-agent -Pall -Pbuild-repo

2、-Dmaven.test.skip=true和-DskipTests=true的区别

-Dmaven.test.skip=true 和 -DskipTests 都是用于跳过测试的 Maven 参数,但它们有细微的区别

(1)-Dmaven.test.skip=true
  • 跳过测试编译和执行:使用这个参数,Maven 会完全跳过测试的编译和执行过程。这意味着测试代码不会被编译,也不会运行任何测试用例。
  • 影响范围:更为全局。它不仅跳过 Surefire 插件(用于单元测试)的执行,还会跳过其他可能运行测试的插件(如 Failsafe 插件,用于集成测试)。

    示例命令:

    mvn clean package -Dmaven.test.skip=true
    
    (2)-DskipTests
    • 仅跳过测试执行:使用这个参数,Maven 仍然会编译测试代码,但不会运行测试用例。测试类会被编译并包含在构建输出中,但不会被执行。
    • 影响范围:主要影响 Surefire 和 Failsafe 插件的执行。如果你的构建流程中有其他插件依赖于测试代码的编译,使用这个选项会比较安全,因为测试代码仍然会被编译。

      示例命令:

      mvn clean package -DskipTests
      
      (3)详细对比
      1. 测试代码编译:

        • -Dmaven.test.skip=true:测试代码不会被编译。
        • -DskipTests:测试代码会被编译,但不会被执行。
        • 插件影响:

          • -Dmaven.test.skip=true:会影响所有插件,不仅仅是 Surefire 和 Failsafe 插件。
          • -DskipTests:主要影响 Surefire 和 Failsafe 插件的执行,但测试代码仍会被编译。
          • 适用场景:

            • -Dmaven.test.skip=true:在你确实不需要测试代码的情况下使用,例如快速构建生产版本。
            • -DskipTests:在你需要测试代码编译但不需要执行测试的情况下使用,例如开发阶段需要快速构建但仍然希望确保测试代码编译通过。

      3、结论

      • 快速跳过所有测试相关的步骤:使用 -Dmaven.test.skip=true。
      • 仅跳过测试执行但保留测试代码编译:使用 -DskipTests。

        希望这些解释能够帮大家更好地理解这两个参数的区别,并根据需求选择合适的选项。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]