繁体   English   中英

Archlinux:无法构建 bazel java-tutorial

[英]Archlinux: can't build bazel java-tutorial

环境

%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

协议

%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

预期的

构建通行证

观察到的

上面的痕迹...

您可以通过传递--host_jvm_args=--add-opens=java.base/java.nio=ALL-UNNAMED--host_jvm_args=--add-opens=java.base/java.lang=ALL-UNNAMED启动标志给 Bazel。

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

经过一番挖掘,Archlinux 软件包jdk-openjdk是 Java 17,而 bazel 是针对 JDK-11 构建的,因此“默认”它会失败。

修复它的另一种方法是更改​​“JAVA_HOME”使用:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk

bazel clean
bazel build //:ProjectRunner

注意:您也可以尝试使用帮助脚本archlinux-java ref 将您的 env 切换到 JDK 11: https : //wiki.archlinux.org/title/java#Switching_between_JVM

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM