Search code examples
mavenmaven-surefire-pluginmaven-compiler-plugin

How to permanently exclude one test class in a Maven build


I'm trying to exclude a single test from my maven build (I don't want the test to be compiled or executed). The following doesn't work:

<project ...>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>**/MyTest.java</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

What is the correct way to achieve my goal? I know that I can use the command-line option -Dmaven.test.skip=true, but I would like this to be part of the pom.xml.


Solution

  • Skip the test

    From the docs, if you want to skip a test, you can use:

    <project>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
              <excludes>
                <exclude>**/MyTest.java</exclude>
              </excludes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    

    See the diference, in your example, you use <artifactId>maven-compiler-plugin</artifactId>, and the docs say that you shoul use <artifactId>maven-surefire-plugin</artifactId> plugin instead.

    And, if you want to disable all test, you can use:

        <configuration>
          <skipTests>true</skipTests>
        </configuration>
    

    Also, if you are using JUnit, you can use @Ignore, and add a message.

    Exclude the test from compilation

    From this answer, you can use. The trick is intercept the <id>default-testCompile</id> <phase>test-compile</phase> (default test compile phase) and exclude the class:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <executions>
        <execution>
          <id>default-testCompile</id>
          <phase>test-compile</phase>
          <configuration>
            <testExcludes>
              <exclude>**/MyTest.java</exclude>
            </testExcludes>
          </configuration> 
          <goals>
            <goal>testCompile</goal>
          </goals>
        </execution>                  
      </executions>
    </plugin>