You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK11添加--add-opens等JVM参数仍无法解决InaccessibleObjectException问题

问题:JDK11中指定--add-opens参数仍无法解决InaccessibleObjectException

异常信息

java.lang.reflect.InaccessibleObjectException: Unable to make field protected transient int java.util.AbstractList.modCount accessible: module java.base does not "opens java.util" to unnamed module @43393097
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)

尝试过的方案

网上记载的常规修复参数:

  • --illegal-access=permit(JDK11标记为过时,JDK17移除)
  • --add-opens=java.base/java.util=ALL-UNNAMED

我先后尝试过JDK17、Amazon Corretto 11、OpenJDK11,单独/组合使用上述参数(含--illegal-access=warn)均无效。

当前启动命令与JDK版本

me in ~/dev/project on branch main > java --version
openjdk 11.0.19 2023-04-18 LTS
OpenJDK Runtime Environment Corretto-11.0.19.7.1 (build 11.0.19+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.19.7.1 (build 11.0.19+7-LTS, mixed mode)

me in ~/dev/project on branch main > java -jar --add-opens=java.base/java.util=ALL-UNNAMED out/server/assembly.dest/out.jar 

疑问

所有资料显示JDK11中--add-opens=java.base/java.util=ALL-UNNAMED可解决该问题,但实际无效。Jar包的构建方式是否会影响这个问题?这是否只是运行时权限问题?


解答

1. 修正JVM参数位置(最可能的根因)

你的启动命令存在参数顺序错误:JVM参数必须放在-jar之前,否则会被当作应用程序的启动参数而非JVM参数,自然无法生效。

错误命令:

java -jar --add-opens=java.base/java.util=ALL-UNNAMED out/server/assembly.dest/out.jar 

正确命令:

java --add-opens=java.base/java.util=ALL-UNNAMED -jar out/server/assembly.dest/out.jar

2. Jar构建方式确实会影响权限配置

如果你的Jar是模块化JAR(包含module-info.class),那么ALL-UNNAMED就不适用——此时你的应用属于命名模块,需要将权限开放给对应模块名:

java --add-opens=java.base/java.util=你的应用模块名 -jar out/server/assembly.dest/out.jar

获取模块名的方法:

  • 解压Jar包,查看module-info.class中的module声明
  • 启动时添加--show-module-resolution参数,从日志中找到应用模块的名称

3. 其他排查点

  • 若应用依赖框架(如Spring、MyBatis等),部分框架内部也会通过反射访问AbstractList的modCount,可能需要额外添加针对框架模块的--add-opens参数
  • 检查是否存在冲突的JVM参数,比如--illegal-access=deny会覆盖--illegal-access=permit的效果(JDK11中permit仍可用但会触发警告)

内容的提问来源于stack exchange,提问作者Bender Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:47:21