Setting the --source and --target of the Java Compiler

Using --source and --target options is not recommended. If you're are using version 3.13.0 or newer of the Compiler Plugin, use the recommended release configuration instead.

Sometimes you may need to compile a certain project to a different version than what you are currently using. The javac command can accept such options using --source and --target. The Compiler Plugin can also be configured to provide these options during compilation. You have to set the version following Java's new Version-String Scheme (JEP 223).

For example, if you want to use the Java 8 language features and also want the compiled classes to be compatible with JVM 8 (former 1.8), you can either add the two following properties, which are the default property names for the plugin parameters:

<project>
  [...]
  <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
  </properties>
  [...]
</project>

or configure the plugin directly:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>...</version>
        <configuration>
          <source>8</source>
          <target>8</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

Note: Merely setting the target option does not guarantee that your code actually runs on a JDK with the specified version. The pitfall is unintended usage of APIs that only exist in later JDKs which would make your code fail at runtime with a linkage error. To avoid this issue, you can either configure the compiler's boot classpath to match the target JDK, or use the Animal Sniffer Maven Plugin to verify your code doesn't use unintended APIs, or better yet use the release option.

In the same way, setting the source option does not guarantee that your code actually compiles on a JDK with the specified version. To compile your code with a specific JDK version, different than the one used to launch Maven, refer to the Compile Using A Different JDK example.