Java 17 and maven-archetype-quickstart gives error: Source Option 5 is no longer supported

Java 17 and maven-archetype-quickstart gives error: Source Option 5 is no longer supported

当使用maven命令创建一个简单的Maven项目时(使用最新版本的maven和java),我得到错误:

[ERROR] Source option 5 is no longer supported. Use 7 or later.
[ERROR] Target option 5 is no longer supported. Use 7 or later.

那么,需要做些什么来解决这个问题。我是更改 maven 命令还是编辑 pom.xml 文件?

重现错误

首先确认你使用的 Java 和 Maven 的版本 运行ning. 在提出这个问题时,我正在使用最新版本的 Maven 和 Java。 Maven:3.8.4 和 Java 17.0.2
以下是详情

mvn --version
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: D:\p\apache-maven-3.8.4
Java version: 17.0.2, vendor: Oracle Corporation, runtime: D:\p\jdk-17.0.2
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

java -version
java version "17.0.2" 2022-01-18 LTS
Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)

创建类似 maven hello world 的程序

我使用此命令创建了 Java maven 示例程序。

mvn archetype:generate -DgroupId=com.example -DartifactId=helloworld -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

我找到了以下 link,其中更详细地解释了这一点(如果需要)。 https://facingissuesonit.com/2017/06/06/how-to-create-maven-java-console-project/.

构建代码

接下来,构建代码并观察错误。

cd helloworld
mvn clean install
[ERROR] COMPILATION ERROR :
[ERROR] Source option 5 is no longer supported. Use 7 or later.
[ERROR] Target option 5 is no longer supported. Use 7 or later.

注意 错误

但是,如果我切换回 Java 8 (JDK 1.8) 和 运行 maven 构建命令,则代码编译成功。 下面是成功编译和使用的 maven 版本和 JDK 导致编译成功的版本。

mvn clean install
[INFO] BUILD SUCCESS

mvn --version
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: D:\p\apache-maven-3.8.4
Java version: 1.8.0_271, vendor: Oracle Corporation, runtime: D:\p\jdk1.8.0_271\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

我的问题是,我该如何解决这个问题?为什么会这样?

出现问题是因为maven插件(maven-compiler-plugin:3.1)将参数-source 1.5 -target 1.5传递给了JDK 17 java编译器。

JDK 17 编译器不支持为 Java 1.5 运行时生成代码,因此产生的错误如下所示:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile 
[ERROR] Source option 5 is no longer supported. Use 7 or later.
[ERROR] Target option 5 is no longer supported. Use 7 or later.

如果在 运行 maven 命令时使用 -X 调试标志,您可以看到这一点,如下所示:

mvn -X clean install
. . . lots of output omitted . . .
[DEBUG] Command line options:
[DEBUG] -target 1.5 -source 1.5 -d target\classes -classpath target\classes; -sourcepath src\main\java; -g -nowarn
. . .

修复方法是修改 pom.xml 文件,使 maven-compiler-plugin 将传递像 -source 1.8 -target 1.8(或更高的数字)这样的选项,这样 JDK 17 就可以生成针对 JDK 17 编译器支持的 JDK 版本的代码。

例如,要使用 JDK 1.8,您需要将以下内容添加到 pom.xml 文件中。

<properties>
     <maven.compiler.source>1.8</maven.compiler.source>
     <maven.compiler.target>1.8</maven.compiler.target>
</properties>

问答 如果您有兴趣,还可以添加更多信息。

注意:maven-compiler-plugin 的 3.1 版本非常旧(2013 年 4 月发布)基于 https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin,所以当时,Java 版本 1.5 是一个可行的选择。