设置Java 编译器的-source-target

有时,您可能需要将某个项目编译为与当前使用的版本不同的版本。javac可以使用-source-target接受此类命令。编译器插件也可以配置为在编译期间提供这些选项。

例如,如果您想使用 Java 8 语言特性(-source 1.8)并且还希望编译的类与 JVM 1.8 兼容(-target 1.8),您可以添加以下两个属性,它们是默认属性插件参数的名称:

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

或者直接配置插件:

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

注意:仅设置目标选项并不能保证您的代码实际运行在具有指定版本的 JRE 上。陷阱是意外使用仅存在于后来的 JRE 中的 API,这会使您的代码在运行时失败并出现链接错误。为避免此问题,您可以配置编译器的引导类路径以匹配目标 JRE,或使用Animal Sniffer Maven Plugin来验证您的代码不使用意外 API,或者最好使用自 JDK 9 以来支持的发布选项。同理,设置选项不保证您的代码实际上在具有指定版本的 JDK 上编译。要使用不同于启动 Maven 的特定 JDK 版本编译代码,请参阅使用不同的 JDK 编译示例。