有时,您可能需要将某个项目编译为与当前使用的版本不同的版本。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 编译示例。