 ------
 Setting the -source and -target of the Java Compiler
 ------
 Edwin Punzalan
 ------
 2006-07-05
 ------

~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~   http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

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

  Sometimes when you may need to compile a certain project to a different
  version than what you are currently using.  The <<<javac>>> can accept
  such command using <<<-source>>> and <<<-target>>>.  The Compiler Plugin
  can also be configured to provide these options during compilation.

  For example, if you want to use the Java 8 language features (<<<-source 1.8>>>)
  and also want the compiled classes to be compatible with JVM 1.8 (<<<-target 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>1.8</maven.compiler.source>
    <maven.compiler.target>1.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>${project.version}</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>
+-----

  <<Note:>> Merely setting the <<<target>>> option does not guarantee that your code actually runs on a JRE with the
  specified version. The pitfall is unintended usage of APIs that only exist in later JREs 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 JRE, or use the
  {{{http://www.mojohaus.org/animal-sniffer/animal-sniffer-maven-plugin/}Animal Sniffer Maven Plugin}}
  to verify your code doesn't use unintended APIs, or better yet use the
  {{{../examples/set-compiler-release.html}<<<release>>> option supported since JDK 9}}.
  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 {{{../examples/compile-using-different-jdk.html}Compile Using A Different JDK}} example.
