Unrecognized option: --add-opens java.base/java.lang=ALL-UNNAMED

由于 Java中有关反射相关的功能自从 JDK9 就开始进行了限制,因此如果还想继续在JDK9以及更高的版本中使用反射相关的功能,需要添加JVM启动参数, --add-opens java.base/java.lang=ALL-UNNAMED

由于现在的项目都是用Docker部署的,所以紧接着在DockerFile中添加了这个JVM启动参数,如下所示:

ENTRYPOINT ["java", "--add-opens java.base/java.lang.reflect=ALL-UNNAMED","-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

但是Docker在启动项目的时候又报错了

Unrecognized option: --add-opens java.base/java.lang=ALL-UNNAMED
2024-05-15T09:54:39.098594714Z Error: Could not create the Java Virtual Machine.
2024-05-15T09:54:39.098656798Z Error: A fatal exception has occurred. Program will exit.

原来是因为JVM并不能识别参数中的空格,所以正确的参数应该是:

--add-opens=java.base/java.util=ALL-UNNAMED

完整DockerFile文件

FROM alibabadragonwell/dragonwell:17-anolis

MAINTAINER test@qq.com

RUN mkdir -p /project

WORKDIR /project

EXPOSE 7911

ADD ./target/app.jar ./app.jar

ENTRYPOINT ["java", "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED","-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

CMD ["--spring.profiles.active=prod"]
posted @ 2024-05-15 11:06  leepandar  阅读(164)  评论(0编辑  收藏  举报