使用Maven Wrapper的Java 17导致无法识别的VM选项“MaxPermSize=512m”

t40tm48m  于 2023-10-17  发布在  Maven
关注(0)|答案(2)|浏览(260)

我使用OpenJDK 17和来自Spring Initializr的Maven Wrapper 3.8.2(Maven项目,Java 17,Sping Boot 2.6.0)。无其他依赖项。

user@DESKTOP-U2OU5HG MINGW64 /c/Projects/my-project (master)
$ java -version
openjdk version "17" 2021-09-14
OpenJDK Runtime Environment (build 17+35-2724)
OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)

在运行./mvnw.cmd -version./mvnw.cmd clean install时,我总是得到以下消息:

Unrecognized VM option 'MaxPermSize=512m'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

切换到OpenJDK 16.0.2解决了这个问题,但是,我需要使用Java 17。
如何让它运行?没有MaxPermSize=512m设置。

t98cgbkg

t98cgbkg1#

实际上,根据Java® Development Kit Version 16/17工具规范,-XX:MaxPermSize=size的标签如下(请参阅链接):

  • 在Java 16中,它已经过时了。
  • 在Java 17中,它被删除

然而,mvnw.cmd脚本中的Maven Wrapper除了必需的JAVA_HOME之外,还使用了一堆 * 可选 * 环境变量,例如M2_HOME和以MAVEN_前缀开头的环境变量。
重要的一个是MAVEN_OPTS,其中可能会出现这样一个删除的Java选项,导致无法在新版本上启动JVM。在我的情况下,我有这样的东西:

MAVEN_OPTS="-Xmx4g -XX:MaxPermSize=512m -Dfile.encoding=UTF-8"

解决方案是从环境变量中删除该选项,或者将这一行添加到Maven Wrapper脚本中以覆盖MAVEN_OPTS值,以最小形式:

MAVEN_OPTS=
yyhrrdl8

yyhrrdl82#

在jdk17中使用MaxMetaspaceSize代替MaxPermSize,MetaspaceSize代替PermSize。
参考:https://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html

相关问题