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 启动失败。
二、为什么会出现?
- 你用的 JDK 版本 >= 9(Java 11、17 最常见)
- Apache Ignite 版本比较旧(2.8 及以下)
- 旧版 Ignite 使用了 Java 高版本不允许的底层内存反射访问
- 所以 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
四、如果不想加参数(备选方案)
- 降级 JDK 到 Java 8(最稳,旧版 Ignite 原生支持)
- 升级 Ignite 到 2.10+ / 2.15+(高版本已修复兼容问题)
浙公网安备 33010602011771号