maven: How can I skip test in some projects via command line options?

To toggle unit tests on and off for an entire project use Maven Surefire Plugin’s capability of skipping tests. There is a drawback with using skipTests from the command line. In a multi-module build scenario, this would disable all tests across all modules.

If you need more fine grain control of running a subset of tests for a module, look into using the Maven Surefire Plugin’s test inclusion and exclusion capabilities.

To allow for command-line overrides, make use of POM properties when configuring the Surefire Plugin. Take for example the following POM segment:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <excludes>
            <exclude>${someModule.test.excludes}</exclude>
          </excludes>
          <includes>
            <include>${someModule.test.includes}</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <properties>
    <someModule.skip.tests>false</someModule.skip.tests>
    <skipTests>${someModule.skip.tests}</skipTests>
    <someModule.test.includes>**/*Test.java</someModule.test.includes>
    <someModule.test.excludes>**/*Test.java.bogus</someModule.test.excludes>
  </properties>

With a POM like the above you can execute tests in a variety of ways.

  1. Run all tests (the above configuration includes all **/*Test.java test source files)
mvn test
  1. Skip all tests across all modules
mvn -DskipTests=true test
  1. Skip all tests for a particular module
mvn -DsomeModule.skip.tests=true test
  1. Only run certain tests for a particular module (this example includes all **/*IncludeTest.java test source files)
mvn -DsomeModule.test.includes="**/*IncludeTest.java" test
  1. Exclude certain tests for a particular module (this example excludes all **/*ExcludeTest.java source files)
mvn -DsomeModule.test.excludes="**/*ExcludeTest.java" test

Leave a Comment