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 是一个可行的选择。
当使用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 是一个可行的选择。