How do I get a Java maven build to fail for compiler warnings?

New in maven-compiler-plugin 3.6.0: the failOnWarning flag. This worked for me:

  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.6.0</version>
    <executions>
      <execution>
        <id>compile</id>
        <phase>process-sources</phase>
        <goals>
          <goal>compile</goal>
        </goals>
        <configuration>
          <compilerArgument>-Xlint:-processing</compilerArgument>
          <failOnWarning>true</failOnWarning>
        </configuration>
      </execution>
    </executions>
  </plugin>

Note that I had to exclude the processing lint or otherwise auto-matter's annotations would break the build with cryptic "symbol not found" errors.


Update for the year 2015, using Maven 3.3 and Java 8.

Here's a minimal compiler configuration that enables all warnings and makes the build fail whenever warnings occur.

<plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <showWarnings>true</showWarnings>
            <compilerArgs>
                <arg>-Xlint:all</arg>
                <arg>-Werror</arg>
            </compilerArgs>
        </configuration>
    </plugin>
</plugins>

Bits of note:

  • <showWarnings>true</showWarnings> is required. For reasons unknown, Maven by default actively suppresses warnings with the -nowarn flag, so the -Xlint and -Werror flags would be ignored.
  • showDeprecation doesn't need to be enabled because -Xlint:all already emits deprecation warnings.
  • Experimentation shows that fork doesn't need to be enabled, even though the documentation says otherwise.

An update on 2020, I am using Spring Boot 2.2.5. The following config can stop the mvn install when warning, error happen.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <failOnError>true</failOnError>
        <failOnWarning>true</failOnWarning>
    </configuration>
 </plugin>