Windows 11安装Cassandra触发IllegalAccessError问题求助
Cassandra启动错误解决方案
原因分析
这些IllegalAccessError是Cassandra与Java运行环境不兼容导致的:
- 错误日志中出现
java.base模块标识,说明实际运行的是Java 9及以上版本。Java 9引入的模块系统(JPMS)会禁止未命名模块(如Cassandra)访问JDK内部私有类(比如sun.nio.ch.DirectBuffer、sun.rmi.registry.RegistryImpl),而老版本Cassandra依赖这些内部API。 - 若确实使用Java 1.8,可能是用了非Oracle的JDK(如OpenJDK),部分老版本Cassandra仅兼容Oracle JDK 8的内部实现。
解决步骤
1. 切换到Oracle JDK 8(优先推荐)
- 执行以下命令确认当前Java版本:
java -version - 安装Oracle JDK 8,并将其设置为系统默认Java:
- 打开「环境变量」设置,修改
JAVA_HOME为Oracle JDK 8的安装路径(例如C:\Program Files\Java\jdk1.8.0_381) - 将
%JAVA_HOME%\bin移至系统Path变量的最顶端,确保优先使用该JDK
- 打开「环境变量」设置,修改
2. 适配Java 9+的启动参数(若无法切换Java版本)
如果必须使用Java 9及以上版本,修改Cassandra的JVM启动参数:
- 打开Cassandra安装目录下的
conf\jvm.options文件 - 添加以下参数到文件开头:
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=java.rmi/sun.rmi.registry=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED - 保存后重启Cassandra服务
3. 验证Cassandra版本兼容性
- 确认Cassandra版本与Java版本匹配:
- Cassandra 3.11.x及更早:仅支持Java 8
- Cassandra 4.0+:支持Java 8、11(部分子版本支持Java 17)
- 若版本不匹配,升级Cassandra到对应Java版本兼容的版本
内容的提问来源于stack exchange,提问作者dariusiv
相关产品推荐
相关产品推荐

