springboot项目升级jdk17
遇到问题:
运行报错Unable to make public final java.lang.Object java.util.HashMap$Node.getKey() accessible: module java.base does not “opens java.util” to unnamed module @3f6b0be5
原因:
Java 9 及更高版本中,java.util 包属于 java.base 模块,并且默认情况下,java.base 模块不会向其他模块开放内部类和成员的访问权限。
HashMap.Node 是 java.util 包内的私有类,它在 Java 8 及更早版本中是可访问的,但在 Java 9 及更高版本中,由于模块化系统的限制,你不能直接访问它,除非你明确地打开了必要的权限。
解决方案:
在启动参数( JVM 参数)中使用 --add-opens
--add-opens
java.management/java.lang.management=ALL-UNNAMED
--add-opens
jdk.management/com.sun.management.internal=ALL-UNNAMED
--add-opens
java.management/sun.management=ALL-UNNAMED
--add-opens
java.base/java.time=ALL-UNNAMED
--add-opens
java.base/java.util.concurrent=ALL-UNNAMED
--add-opens
java.base/java.util.concurrent.locks=ALL-UNNAMED
--add-opens
java.base/java.security=ALL-UNNAMED
--add-opens
java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens
java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED
--add-opens
java.base/java.net=ALL-UNNAMED
--add-opens
java.base/sun.nio.ch=ALL-UNNAMED
--add-exports
java.base/sun.security.action=ALL-UNNAMED
--add-opens
java.base/java.lang=ALL-UNNAMED
--add-opens
java.base/java.math=ALL-UNNAMED
--add-opens
java.base/java.util=ALL-UNNAMED
--add-opens
java.base/sun.util.calendar=ALL-UNNAMED
--add-opens=java.base/java.nio=ALL-UNNAMED