42

我正在使用以下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 网站)和-DskipTests=true,当我选中“跳过测试”复选框时,它是由 IntelliJ Idea 添加的。

我不使用任何 Maven settings.xml

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

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

4

6 回答 6

51

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

-Dmaven.test.skip=true 

或者

-DskipTests=true 

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

于 2013-11-07T14:49:53.197 回答
16

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

  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. 您使用的是最新版本的插件吗?在这里检查。您的版本可能不支持此选项。

于 2013-11-07T15:08:14.200 回答
10

不仅仅是考虑到您使用的是 surfire 2.3-DskipTests=true-DskipTests

所以你运行它

mvn install -DskipTests
于 2013-11-07T15:20:19.420 回答
2

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

于 2016-03-14T16:50:49.493 回答
0

为您的万无一失插件尝试以下配置

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${version.surefire.plugin}</version>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
于 2013-11-07T14:45:40.150 回答
0

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

所以,-DskipTests/-DskipTests=true/-DskipITs/etc 不起作用,我也不知道为什么。我<profiles>在父母那里有pom.xml问题,问题出在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
于 2019-11-26T08:29:42.050 回答