ArchLinux环境下Bazel构建java-tutorial项目内部崩溃如何解决
问题根因
Bazel 4.2.0版本仅兼容Java 11及更低版本,当前运行环境默认JDK为Java 16,Java 9及以上版本引入的模块系统限制了对JDK内部API的反射访问权限,Bazel 4.2.0内部依赖的Unsafe调用直接访问java.lang.String内部构造器的逻辑被Java 16的权限校验拦截,因此触发内部崩溃。
解决方案
方案1:降级系统默认JDK到Java 11(最稳定,适配Bazel 4.x全版本)
Arch Linux可直接通过包管理器安装Java 11:
sudo pacman -S jdk11-openjdk
安装完成后切换系统默认JDK:
sudo archlinux-java set java-11-openjdk
验证切换结果:
java -version echo $JAVA_HOME
确认JDK版本为11后,先清理之前的Bazel残留缓存再重新构建:
bazel clean --expunge bazel build //:ProjectRunner
方案2:临时添加JVM启动参数绕过模块限制(无需更换JDK,仅针对当前运行生效)
在Bazel启动命令前添加JVM参数,手动开放java.lang模块的访问权限:
bazel --host_jvm_args="--add-opens=java.base/java.lang=ALL-UNNAMED" build //:ProjectRunner
如果需要长期生效,可将参数写入Bazel配置文件~/.bazelrc:
startup --host_jvm_args="--add-opens=java.base/java.lang=ALL-UNNAMED"
方案3:升级Bazel到5.0及以上版本(官方已修复Java高版本兼容问题)
Arch Linux可直接升级Bazel包:
sudo pacman -Syu bazel
升级完成后清理缓存重新构建即可。
内容的提问来源于stack exchange,提问作者Mizux
相关产品推荐
相关产品推荐

