设置java编译器的-source和-target
有时,需要将某个工程编译为指定版本,自然而然想到,javac
的-source
和-target
参数。比如,你想使用java8的特性,那么就指定-source 1.8
,并且也想编译的字节码与jvm1.8兼容,那就指定-target 1.8
。
Maven的Compiler plugin
也支持这两个选项,他们分别叫maven.compiler.source
和maven.compiler.target
,可以如下配置
<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.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>
注意:仅仅配置target
并不能确保你的代码实际运行在指定版本的JRE上。比如源代码中使用了较高版本的API,这会使你的代码在运行时出现linkage error
。为了避免这个问题,你可以配置编译器的的boot classpath匹配目标jre或者使用 Animal Sniffer Maven Plugin
校验你的code没有使用意料之外的API。同样的,设置source
也并不能确保你的code用指定版本的jdk编译。如果想这样做,请查阅Compile Using A Different JDK
插件。
参考
Setting the -source and -target of the Java Compiler