【问题标题】:Maven -DskipTests ignoredMaven -DskipTests 被忽略
【发布时间】:2013-11-19 06:19:11
【问题描述】:

我正在使用以下 SureFire 配置构建一个 Maven 项目:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${version.maven-surefire-plugin}</version>
    <configuration>
        <includes>
            <include>**/*Test.java</include>
        </includes>
    </configuration>
</plugin>

问题是,当我使用mvn clean install -DskipTests=true 构建它时,测试仍在执行中。可能是什么问题呢?

我尝试了-DskipTests(来自Maven website)和-DskipTests=true,这是在我选中“跳过测试”复选框时由 IntelliJ Idea 添加的。

我不使用任何 Maven settings.xml

  • Maven 版本:2.2.1
  • Surefire 插件:2.3

编辑 如果我注释掉 SureFire 插件配置,则该参数的行为与我预期的一样。上面的配置可能有什么问题?

【问题讨论】:

  • 试一试-Dmaven.test.skip
  • farmer: 编辑:这行得通,但它做了一些不同的事情。测试不仅被禁用,而且没有编译 Reimus:相同的结果
  • 那个万无一失的配置是多余的。即使没有明确配置插件,Surefire 也始终运行,因为它是标准插件。摆脱整个部分,看看会发生什么。
  • 您的测试是在每个模块的标准src/test/java 目录中还是在不同的位置?您在 POM 中发布的部分的目的是什么?
  • @NeplatnyUdaj 你用的是什么版本的surefire?

标签: java maven junit maven-surefire-plugin


【解决方案1】:

这是个老问题,但也许我的案例对某人有帮助。

所以,-DskipTests/-DskipTests=true/-DskipITs/etc 不起作用,我不知道为什么。 我的父母pom.xml 中有&lt;profiles&gt;,问题出在surefire/failsafe 的配置中。

<profiles>
        <profile>
            <id>unit-test</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>integration-test</id>
            <properties>
                <skip.unit-tests>true</skip.unit-tests>
                <skip.integration-tests>false</skip.integration-tests>
                <skip.end-to-end-tests>true</skip.end-to-end-tests>
            </properties>
        </profile>
...
</profiles>

在插件配置中我使用如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven-surefire-plugin.version}</version>
    <configuration>
        <skipTests>${skip.unit-tests}</skipTests>
    </configuration>
...
</plugin>

此命令无效:

mvn clean install -DskipTests -DskipITs

这行得通:

mvn clean install -Dskip.unit-tests=true -Dskip.integration-tests=true -Dskip.end-to-end-tests=true

【讨论】:

    【解决方案2】:

    考虑到您使用的是 surfire 版本 2.3,它不是 -DskipTests=true 它只是 -DskipTests

    所以你运行它

    mvn install -DskipTests
    

    【讨论】:

    • 我一直这样做。但是我的surefire版本是2.5 ..我只是用2.3 surefire版本试了一下,它忽略了skipTests。你能用 2.5 试试吗?
    • 是的。这就是问题所在。它完美地解释了我观察到的行为
    • 两者都可以使用-DskipTests更方便
    【解决方案3】:

    Maven 知道跳过测试的两种类型的参数:

    -Dmaven.test.skip=true 
    

    -DskipTests=true 
    

    surefire-plugin documentation 只提到了第一个,你还没有尝试过。

    【讨论】:

    • 但是 maven.test.skip 也跳过了编译测试。这不一定是 OP 想要的。
    • 是否可以编译测试而不运行它们?
    • 您使用的标志应该这样做@NeplatnyUdaj
    • 是的。这应该。显然我的surefire插件配置打破了它。请参阅原始帖子的编辑。
    【解决方案4】:

    我不确定为什么尚未发布正确答案。在旧版本的 SureFire 中,编译测试但不运行测试的标志是 -Dmaven.test.skip.exec

    【讨论】:

      【解决方案5】:

      你所做的应该有效。如何进一步调试:

      1. 运行 mvn help:effective-pom 以查看 Maven 将执行的整个 POM。搜索test(不区分大小写)看看是否有什么奇怪的地方。

      2. 运行mvn test -X 以获取调试输出。这将打印用于配置maven-surefire-plugin 的选项。确保将输出重定向到文件!

        在日志中,你会看到

        [DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.15:test' with basic configurator -->
        

        然后,下面的几行:

        [DEBUG]   (s) runOrder = filesystem
        [DEBUG]   (s) skip = false
        [DEBUG]   (s) skipTests = false
        

        这些值表示不会跳过测试。

      3. 您使用的是最新版本的插件吗? Check here。您的版本可能不支持此选项。

      【讨论】:

      • 在第 1 步中,我没有看到任何奇怪的东西,但我也不知道要寻找什么。我在步骤 2 中没有看到这些参数。这些是我拥有的参数(我认为这可能意味着这个问题): forkMode=once;孩子委托=假;并行=假;useFile=真
      • 插件的哪个版本?
      • 更新到 2.15 版。 2.3 已经很老了。也许它不支持紧凑的语法。
      • 啊……现在我明白了。当我完全删除surefire配置时它会起作用,因为它使用的是较新的版本。
      • @AaronDigulla 你似乎是第一个建议更新万能的人。您为什么不发布您的评论作为答案,以便 NeplatnyUdaj 可以接受它?这将使您的声誉有所提高,并使解决方案更加明显。
      【解决方案6】:

      为你的surefire插件尝试以下配置

      <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${version.surefire.plugin}</version>
          <configuration>
              <skip>true</skip>
          </configuration>
      </plugin>
      

      【讨论】:

      • 没错。我希望它们在构建服务器上以及当有人签出代码时执行。我只需要在我的项目配置中禁用它们
      • 您可以为需要跳过或执行测试的不同场景创建不同的 Maven 构建配置文件
      • 对于这么简单的事情,这似乎有点过头了。
      猜你喜欢
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多