Java 9+ 开启了模块化安全限制,不允许 Ignite 直接访问底层内存地址,导致 Ignite 启动失败

Java 高版本(Java 9+)与 Apache Ignite 旧版本不兼容 导致的模块访问权限报错
核心报错信息:
plaintext
 
 
java.lang.reflect.InaccessibleObjectException:
Unable to make field long java.nio.Buffer.address accessible:
module java.base does not "opens java.nio" to unnamed module
 
翻译:
 
Java 9+ 开启了模块化安全限制,不允许 Ignite 直接访问底层内存地址,导致 Ignite 启动失败。

二、为什么会出现?

  1. 你用的 JDK 版本 >= 9(Java 11、17 最常见)
  2. Apache Ignite 版本比较旧(2.8 及以下)
  3. 旧版 Ignite 使用了 Java 高版本不允许的底层内存反射访问
  4. 所以 JVM 直接拒绝,抛出异常

三、最简单、100% 能解决的方案

给 Java 启动加一行 JVM 参数,开放权限即可。

你只需要添加这 2 个参数:

plaintext
 
 
--add-opens java.base/java.nio=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
 

完整示例(启动命令)

plaintext
 
 
java
--add-opens java.base/java.nio=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
-jar your-app.jar
 

如果是 IDEA / 开发环境

Run/Debug Configurations → VM options
 
粘贴:
plaintext
 
 
--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED
 

四、如果不想加参数(备选方案)

  1. 降级 JDK 到 Java 8(最稳,旧版 Ignite 原生支持)
  2. 升级 Ignite 到 2.10+ / 2.15+(高版本已修复兼容问题)

五、你的业务日志说明

posted @ 2026-05-28 06:45  锐洋智能  阅读(11)  评论(0)    收藏  举报