Maven -DskipTests被忽略了

时间:2013-11-07 14:42:27

标签: java maven junit maven-surefire-plugin

我正在使用以下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插件配置,该参数的行为与我期望的一样。上面的配置可能有什么问题?

6 个答案:

答案 0 :(得分:27)

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

-Dmaven.test.skip=true 

-DskipTests=true 

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

答案 1 :(得分:9)

你做了什么应该工作。如何进一步调试:

  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。您的版本可能不支持此选项。

答案 2 :(得分:1)

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

所以你将其作为

运行
mvn install -DskipTests

答案 3 :(得分:1)

我不确定为什么还没有发布正确的答案。在旧版本的SureFire中,编译测试但不运行它们的标志是var reader = XmlReader.Create(@"file://c:\test.xml"); var document = XElement.Load(reader); document.Add(new XElement("branch", "leaves")); document.Save("Tree.xml");

答案 4 :(得分:0)

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

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

答案 5 :(得分: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