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