为什么我在 Mac 上看到“java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int)accessible”

off*_*by1 6 java macos homebrew maven apache-spark

我已经在工作中愉快地构建代码好几天了,但突然我的一个项目(不是全部)失败并出现此错误消息。看看下面的答案吧!

off*_*by1 4

我是如何修复它的

起初我用谷歌搜索,看到很多有这个问题的人正在使用 Java 16。但我认为(错误!)我正在使用 Java 11,因为

:-) 2021-09-01T10:32:59-0700 $ java --version
openjdk 11.0.12 2021-07-20
OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7)
OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode)
Run Code Online (Sandbox Code Playgroud)

但我后来想进一步检查:

mvn --debug package
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /usr/local/Cellar/maven/3.8.1/libexec
Java version: 16.0.1, vendor: Homebrew, runtime: /usr/local/Cellar/openjdk/16.0.1/libexec/openjdk.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)

“啊哈!” 我说。

所以我通过修复它

  • brew uninstall maven
  • 转到Maven 页面并按照安装说明进行操作。

为什么之前有效?

麻烦的代码最近才添加了一些测试,这恰好触发了一些反射的东西(抱歉含糊其辞,我是 Java 新手:-))

SparkSession.builder().appName("ANewUnitTest").master("local").getOrCreate()
Run Code Online (Sandbox Code Playgroud)