Maven使用的默认Java编译器版本是Java 1.5。为了使Maven使用Java编译器的较新版本编译Java代码,需要在项目的POM文件(pom.xml)中显式指定Java编译器。
指定Java编译器版本的确切方式取决于你使用的是Java 8 或更早版本,还是Java 9或更高版本。从Java 9开始,Java获得了一些模块,这些模块在短期内会使编译有些复杂,但从长期来看应该会有所帮助。
一、 适用于Java 8和更早版本的Maven Java编译器
从Java 8 和更早版本开始,有两种方法可以在Maven POM文件中设置Java编译器版本:
- 通过Maven Java编译器属性。
- 通过Maven Java编译器插件。
以下将说明这两种在Maven中设置Java编译器版本的方法。
1、 Maven Java编译器属性
第一种,也是最简单的方法是通过Maven Java编译器属性:
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
这些属性必须包含在POM文件的properties元素中。
2、Maven Java编译器插件
第二种比较冗长的方法是通过插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
二、完整Maven POM文件示例
这是使用上述两种机制设置的Java编译器版本的完整Maven POM文件。 请注意,你的POM文件中仅应使用一种机制。 该示例仅显示了两个示例,方便看到它们在POM文件中放置的位置。
示例1
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nanosai</groupId>
<artifactId>grid-ops</artifactId>
<version>0.8.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
示例2
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nanosai</groupId>
<artifactId>grid-ops</artifactId>
<version>0.8.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
补充: 适用于Java 9及更高版本的Maven Java编译器
对于Java 9和更高版本,使用插件版的一种变体,用release属性来代替source和target属性:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
本示例在release属性中将Java版本设置为11。Java 11是Java的长期支持(LTS)版本。
还要注意,Maven Java编译器插件的版本已从3.6.1更改为3.8.0。