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

Nik*_*las 20 java maven spring-boot maven-wrapper java-17

我使用OpenJDK 17和来自Spring Initializr的 Maven Wrapper 3.8.2 (Maven 项目、JAR 打包、Java 17、Spring 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)
Run Code Online (Sandbox Code Playgroud)

运行任何./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.
Run Code Online (Sandbox Code Playgroud)

切换到OpenJDK 16.0.2可以解决该问题,但是,我需要使用 Java 17。

如何让它运行?没有地方MaxPermSize=512m设置。

Nik*_*las 39

Indeed-XX:MaxPermSize=size根据 Java\xc2\xae Development Kit Version 16/17 工具规范标记如下(参见链接):

\n
    \n
  • 对于 Java 16 来说它已经过时了
  • \n
  • 对于 Java 17,它已被删除
  • \n
\n

然而,脚本中的 Maven Wrappermvnw.cmd除了必需的之外JAVA_HOME,还使用了一堆可选的环境变量,例如M2_HOME和 这些以MAVEN_前缀开头的变量。

\n

重要的是,MAVEN_OPTS这样一个被删除的 Java 选项可能出现在哪里,导致无法在较新版本上启动 JVM。就我而言,我有类似的事情:

\n
MAVEN_OPTS="-Xmx4g -XX:MaxPermSize=512m -Dfile.encoding=UTF-8"\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
MAVEN_OPTS=\n
Run Code Online (Sandbox Code Playgroud)\n


小智 6

在jdk17中MaxMetaspaceSize代替MaxPermSize和代替使用。MetaspaceSizePermSize

请参阅:https ://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html