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

发布于:2024-06-15 ⋅ 阅读:(18) ⋅ 点赞:(0)

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
发现还是会编译测试模块的代码,如下图:
在这里插入图片描述
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:测试代码会被编译,但不会被执行。
  2. 插件影响

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

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

3、结论

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

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


网站公告

今日签到

点亮在社区的每一天
去签到