由于 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 [email protected]
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"]
标签:lang,java,option,--,add,base,UNNAMED,opens
From: https://www.cnblogs.com/leepandar/p/18193471