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

IntelliJ运行Scala Spark单元测试遇InaccessibleObjectException问题

解决Spark单元测试中InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int) accessible问题

这个错误本质是JDK模块系统限制了反射访问私有构造方法,虽然你已经用了兼容的JDK版本,但单元测试的运行环境和直接运行类的环境存在差异,试试以下方案:

  • 添加JVM反射权限参数
    单元测试的JVM参数可能没开放必要的模块访问权限,需要给测试进程添加:

    --add-opens java.base/java.nio=ALL-UNNAMED
    

    在IntelliJ中操作:打开Run/Debug Configurations,找到你的测试配置,在VM options栏填入上述参数。如果用构建工具(sbt/maven),也要同步配置测试的JVM参数,比如sbt在build.sbt中添加:

    javaOptions in Test += "--add-opens java.base/java.nio=ALL-UNNAMED"
    
  • 调整测试类加载器
    单元测试默认的类加载器可能导致模块权限不生效,在IntelliJ的测试配置中,切换到Configuration标签页,找到Classloader选项,选择Application classloader替代默认的测试类加载器,再重新运行测试。

  • 确认Spark与JDK版本的适配细节
    不同Spark版本对JDK11的支持有差异,比如Spark 3.0+正式支持JDK11,但部分早期3.x版本可能需要额外参数。如果你的Spark版本偏旧,建议切换回JDK8测试,或者升级到对应JDK11兼容的Spark版本。

  • 清理项目缓存并重建
    执行IntelliJ的Build -> Clean Project,再选择Rebuild Project,清除可能存在的缓存配置冲突,之后重新运行测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:27:07