我正在评估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,但我希望构建/测试的项目应该使用安装在:/usr/lib/jvm/java-8-openjdk
下面的JDK。
通过深入研究各种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 //...
然而,我仍对以下几点感到困惑:
发布于 2019-11-25 14:06:44
如何在项目的基础上永久地设置这个选项,这样我就不必总是提供这些选项了?我是否可以这样做,使intellij插件将自动获得它?
是。将此添加到所有构建的<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
来分离编译主机工具和实际源代码编译。
https://stackoverflow.com/questions/59040291
复制