gpt4 book ai didi

java - 配置 bazel 使用特定 JVM 版本构建/测试

转载 作者:行者123 更新时间:2023-11-30 05:23:52 28 4
gpt4 key购买 nike

我正在评估 Bazel 并尝试对其进行配置,以便它使用与构建时不同的 JDK 来构建和测试我的 scala 项目。

这些是我的 bazel info 输出中的相关行:

java-home: /nix/store/09x4mnxfzppwq1yjaakrfa6aj3rp7sw8-openjdk-11.0.4-ga/lib/openjdk
java-runtime: OpenJDK Runtime Environment (build 11.0.3-internal+0-adhoc..jdk11u-jdk-11.0.3-ga) by Oracle Corporation
java-vm: OpenJDK 64-Bit Server VM (build 11.0.3-internal+0-adhoc..jdk11u-jdk-11.0.3-ga, mixed mode) by Oracle Corporation
max-heap-size: 8325MB
package_path: %workspace%
release: release 1.1.0- (@non-git)

虽然我的包管理器似乎使用相当新版本的 openjdk 构建了 Bazel,但我想要构建/测试的项目应该使用我安装在以下位置的 JDK:/usr/lib/jvm/java- 8-openjdk.

通过深入研究各种 github 问题,我最终得到了以下解决方案,它使我能够获得绿色构建:

bazel test \
--define=ABSOLUTE_JAVABASE=/usr/lib/jvm/java-8-openjdk \
--host_javabase=@bazel_tools//tools/jdk:absolute_javabase \
--host_java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla \
--java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla \
--test_timeout=10 --test_output=all //...

但是,我仍然对以下内容感到困惑:

  • 如何在项目的基础上永久设置此选项,这样我就不必一直提供它们?
  • 我可以这样做,让 intellij Bazel 插件自动选择它吗?
  • 上面的设置到底覆盖了什么?是否有更简单的方法来实现相同的结果?

最佳答案

How can I permanently set this option on a project basis, so that I don't have to supply them all the times? Can I do so in such a way that the intellij Bazel plugin will automatically pick it up?

是的。将此添加到 <project root>/.bazelrc让所有构建都使用本地 JDK:

build --define=ABSOLUTE_JAVABASE=/usr/lib/jvm/java-8-openjdk
build --host_javabase=@bazel_tools//tools/jdk:absolute_javabase
build --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla
build --java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla

IntelliJ 插件会自动选择这些。

或者,将它们分组到.bazelrc下。配置如 local_jdk您可以使用 bazel build //:target --config=local_jdk 选择,因此默认的无配置构建不受影响。

build:local_jdk --define=ABSOLUTE_JAVABASE=/usr/lib/jvm/java-8-openjdk
build:local_jdk --host_javabase=@bazel_tools//tools/jdk:absolute_javabase
build:local_jdk --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla
build:local_jdk --java_toolchain=@bazel_tools//tools/jdk:toolchain_vanilla

--host_javabase定义用于宿主工具编译的 Java 规则所使用的 JDK 的位置。

$ bazel query --output=build @bazel_tools//tools/jdk:absolute_javabase

java_runtime(
name = "absolute_javabase",
tags = ["__JAVA_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"],
generator_name = "absolute_javabase",
generator_function = "java_runtime",
generator_location = "tools/jdk/BUILD:75",
java_home = "$(ABSOLUTE_JAVABASE)",
)

--host_java_toolchain定义用于宿主工具编译的Java工具集。

$ bazel query --output=build @bazel_tools//tools/jdk:toolchain_vanilla

java_toolchain(
name = "toolchain_vanilla",
tags = ["__JAVA_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"],
generator_name = "toolchain_vanilla",
generator_function = "default_java_toolchain",
generator_location = "tools/jdk/BUILD:367",
source_version = "",
target_version = "",
bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath"],
misc = ["-XDskipDuplicateBridges=true", "-g", "-parameters"],
jvm_opts = [],
javac_supports_workers = True,
javac = ["@bazel_tools//tools/jdk:javac_jar"],
tools = ["@bazel_tools//tools/jdk:java_compiler_jar", "@bazel_tools//tools/jdk:jdk_compiler_jar"],
javabuilder = ["@bazel_tools//tools/jdk:vanillajavabuilder"],
singlejar = ["@bazel_tools//tools/jdk:singlejar"],
genclass = ["@bazel_tools//tools/jdk:genclass"],
ijar = ["@bazel_tools//tools/jdk:ijar"],
header_compiler = ["@bazel_tools//tools/jdk:turbine"],
header_compiler_direct = ["@bazel_tools//tools/jdk:turbine_direct"],
forcibly_disable_header_compilation = True,
)

--java_toolchain定义用于目标的 Java 编译的 Java 工具集。这独立于 --host_java_toolchain将编译主机工具和实际源编译解耦。

关于java - 配置 bazel 使用特定 JVM 版本构建/测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59040291/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com