首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Archlinux:无法构建bazel java-教程

Archlinux:无法构建bazel java-教程
EN

Stack Overflow用户
提问于 2021-10-08 11:05:49
回答 2查看 243关注 0票数 0

环境

代码语言:javascript
复制
%bazel version
Build label: 4.2.0
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Mon Aug 23 13:31:45 2021 (1629725505)
Build timestamp: 1629725505
Build timestamp as int: 1629725505

%env | grep JAVA_HOME
JAVA_HOME=/usr/lib/jvm/default

%ls -l $JAVA_HOME
lrwxrwxrwx 1 root root 15 Jun 18 22:33 /usr/lib/jvm/default -> java-16-openjdk

协议

代码语言:javascript
复制
%git clone https://github.com/bazelbuild/examples
%cd examples/java_tutorial
%bazel build //:ProjectRunner
                                                 
INFO: Analyzed target //:ProjectRunner (23 packages loaded, 511 targets configured).
INFO: Found 1 target...
[6 / 7] [Prepa] Building ProjectRunner.jar (2 source files)
FATAL: bazel crashed due to an internal error. Printing stack trace:
java.lang.ExceptionInInitializerError
    at com.google.devtools.build.lib.actions.ParameterFile.writeContent(ParameterFile.java:118)
    at com.google.devtools.build.lib.actions.ParameterFile.writeParameterFile(ParameterFile.java:111)
    at com.google.devtools.build.lib.actions.CommandLines$ParamFileActionInput.writeTo(CommandLines.java:275)
    at com.google.devtools.build.lib.sandbox.SandboxHelpers.writeVirtualInputTo(SandboxHelpers.java:238)
    at com.google.devtools.build.lib.sandbox.SandboxHelpers.atomicallyWriteVirtualInput(SandboxHelpers.java:94)
    at com.google.devtools.build.lib.sandbox.SandboxHelpers$SandboxInputs.materializeVirtualInput(SandboxHelpers.java:202)
    at com.google.devtools.build.lib.sandbox.SandboxHelpers$SandboxInputs.access$100(SandboxHelpers.java:154)
    at com.google.devtools.build.lib.sandbox.SandboxHelpers.processInputFiles(SandboxHelpers.java:308)
    at com.google.devtools.build.lib.worker.WorkerSpawnRunner.exec(WorkerSpawnRunner.java:182)
    at com.google.devtools.build.lib.exec.SpawnRunner.execAsync(SpawnRunner.java:238)
    at com.google.devtools.build.lib.exec.AbstractSpawnStrategy.exec(AbstractSpawnStrategy.java:144)
    at com.google.devtools.build.lib.exec.AbstractSpawnStrategy.exec(AbstractSpawnStrategy.java:106)
    at com.google.devtools.build.lib.actions.SpawnStrategy.beginExecution(SpawnStrategy.java:47)
    at com.google.devtools.build.lib.exec.SpawnStrategyResolver.beginExecution(SpawnStrategyResolver.java:65)
    at com.google.devtools.build.lib.rules.java.JavaCompileAction.beginExecution(JavaCompileAction.java:357)
    at com.google.devtools.build.lib.actions.Action.execute(Action.java:127)
    at com.google.devtools.build.lib.skyframe.SkyframeActionExecutor$5.execute(SkyframeActionExecutor.java:855)
    at com.google.devtools.build.lib.skyframe.SkyframeActionExecutor$ActionRunner.continueAction(SkyframeActionExecutor.java:1016)
    at com.google.devtools.build.lib.skyframe.SkyframeActionExecutor$ActionRunner.run(SkyframeActionExecutor.java:975)
    at com.google.devtools.build.lib.skyframe.ActionExecutionState.runStateMachine(ActionExecutionState.java:129)
    at com.google.devtools.build.lib.skyframe.ActionExecutionState.getResultOrDependOnFuture(ActionExecutionState.java:81)
    at com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.executeAction(SkyframeActionExecutor.java:472)
    at com.google.devtools.build.lib.skyframe.ActionExecutionFunction.checkCacheAndExecuteIfNeeded(ActionExecutionFunction.java:834)
    at com.google.devtools.build.lib.skyframe.ActionExecutionFunction.compute(ActionExecutionFunction.java:307)
    at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:477)
    at com.google.devtools.build.lib.concurrent.AbstractQueueVisitor$WrappedRunnable.run(AbstractQueueVisitor.java:398)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make java.lang.String(byte[],byte) accessible: module java.base does not "opens java.lang" to unnamed module @13e39c73
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:188)
    at java.base/java.lang.reflect.Constructor.setAccessible(Constructor.java:181)
    at com.google.devtools.build.lib.unsafe.StringUnsafe.<init>(StringUnsafe.java:75)
    at com.google.devtools.build.lib.unsafe.StringUnsafe.initInstance(StringUnsafe.java:56)
    at com.google.devtools.build.lib.unsafe.StringUnsafe.<clinit>(StringUnsafe.java:37)
    ... 29 more

期望的

构建过程

观察到的

上面的痕迹。

EN

回答 2

Stack Overflow用户

发布于 2021-10-08 14:37:06

您可以通过将--host_jvm_args=--add-opens=java.base/java.nio=ALL-UNNAMED--host_jvm_args=--add-opens=java.base/java.lang=ALL-UNNAMED启动标志传递给Bazel来解决此问题。

可能值得为Arch包提交一个bug,因为它是一个不传递这些标志的发行版bug。

票数 1
EN

Stack Overflow用户

发布于 2021-11-02 14:53:00

在深入研究之后,Archlinux打包了jdk-openjdk,它是Java17,而bazel是基于JDK-11构建的,所以在“默认”情况下它会失败。

另一种修复方法是更改"JAVA_HOME“的用法:

代码语言:javascript
复制
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk

bazel clean
bazel build //:ProjectRunner

注意:您也可以尝试使用助手脚本ref:https://wiki.archlinux.org/title/java#Switching_between_JVM将环境切换到JDK11

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69494854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档