Maven设置项目的Java编译版本
在POM文件里加几行代码就能快速搞定
References:
- https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
- https://maven.apache.org/plugins/maven-resources-plugin/examples/encoding.html
- https://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html
- https://stackoverflow.com/questions/58334000/java-maven-build-source-and-targe-is-not-working
- https://www.baeldung.com/maven-java-version
有时,可能需要将项目编译为与当前使用的JDK不同的版本。javac
可使用-source
和-target
完成这样的事。Compiler Plugin也可以对这些进行设置。例如需要Java 8的功能(-source 1.8
), 并且还希望编译的类与JVM1.8兼容(-target 1.8
), 则可以添加下面的属性,它们是插件的参数名:
<project>
[...]
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</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>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>
以上二选一即可,需要注意的是,如果仅设置了target
而不设置source
可能会导致编译失败。因此,Java9之后新增了release选项, 例如:
<properties>
<maven.compiler.release>11</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
或者
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
我尝试了下,上面设置properties方式不能被正确的处理,下面直接设置plugin就正常,不知道是哪有问题。
另外,如果是spring boot项目,还有更简单的:
<properties>
<java.version>11</java.version>
</properties>