配置bazel以使用特定的JVM版本进行构建/测试

安德里亚·菲奥雷(Andrea Fiore):

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

这些是my输出的相关行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插件自动选择它的方式来这样做吗?
  • 上面的设置完全覆盖哪些设置?有没有更简单的方法来获得相同的结果?
Jin :

如何在项目基础上永久设置此选项,这样我就不必一直提供它们?我可以通过intellij Bazel插件自动选择它的方式来这样做吗?

是。将其添加到<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_jdkbazel 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于将编译宿主工具与实际源代码编译解耦。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用特定的OpenSSL版本构建OpenVPN

配置现有的Eclipse Java项目以使用Gradle进行构建

如何重新配置Eclipse以使用64位JVM

如何使用带有-race选项的bazel进行围棋测试?

自动运行/调试配置的IntelliJ配置,以使用TestNG代替Gradle进行测试

可以使用特定Go版本的Golang构建标签吗?

配置IntelliJ IDEA以使用JUnit进行单元测试

我可以使用travis-ci对特定(包括次要版本)的python版本进行测试吗?

可以使用Cargo在发布模式下构建测试吗?

使用Bazel构建时如何设置C ++标准版本?

配置要使用特定构建工具版本构建的Xcode项目

使用Bazel构建LLVM

您的项目未使用默认配置进行构建和测试

Kestrel配置以使用特定的端口+ URL

指定到特定模块以使用xunit进行测试

配置MassTransit以使用WebApplicationFactory <Startup>进行测试

使用bazel构建Makefile

使用特定的Miniconda Python和NumPy版本进行CircleCI测试

仅在特定配置下执行的Bazel测试规则

有没有一种方法可以使用bazel构建测试而不运行它们?

更改Groovy使用的JVM版本在Drone.io中构建

在配置中使用特定版本的程序

修补清单/清单以使用不同的平台特定设置进行构建

正确的构建版本以使用Google API

如何配置 bazel 以使用安装在 python 站点包中的 tensorflow 构建 C++ 应用程序

是否可以使用特定版本号进行颠覆检入?

如何使用特定的 gcc 版本构建 qemu?

如何配置我的 angular 库以使用正确安装的 RxJS 链接它进行本地测试?

如何添加特定于测试的用户属性以使用 pytest-reportlog 进行报告?