执行neo4j-admin dump命令失败 报Java非法访问错误
报错原因
该报错由Java版本与Neo4j版本不兼容直接导致:
- Neo4j 3.5.x 系列官方仅适配Java 8、Java 11两个长期支持版本
- 你当前使用的Java 16启用了严格的模块访问控制,默认禁止未授权模块访问JDK内部API,而Neo4j 3.5.17的页面缓存组件依赖
sun.nio.ch内部包、异常处理逻辑需要反射访问java.lang.Throwable的内部字段,两个访问请求都被Java 16拦截,最终抛出权限错误。
另外你执行的dump命令本身也存在参数问题:--to参数需要指定具体的备份输出文件路径,不能直接传入目录路径./,否则即使JDK版本正确也会执行失败。
修复方法
按优先级从高到低选择以下方案即可:
- 方案一(官方推荐,无兼容风险):切换运行JDK到兼容版本
- 安装JDK 11(Neo4j 3.5系列兼容性最优的高版本JDK)
- 执行dump命令前,在当前终端临时指定JDK路径,不需要修改系统全局Java配置,示例(根据你实际的JDK安装路径调整):
export JAVA_HOME=/your/jdk11/install/path export PATH=$JAVA_HOME/bin:$PATH - 确认Neo4j服务已经完全停止,执行修正后的dump命令:
./bin/neo4j-admin dump --database=graph.db --to=./neo4j-backup.dump
- 方案二(临时应急,不推荐生产环境使用):手动放开Java 16的模块访问限制
如果暂时无法切换JDK版本,可以编辑bin/neo4j-admin启动脚本,在JVM启动参数段追加以下配置,绕过模块访问校验:
该方案未经过官方兼容性测试,可能触发其他未知运行异常,仅适合临时救急使用。--add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED
内容的提问来源于stack exchange,提问作者Omer Barak
相关产品推荐
相关产品推荐

