当前位置: 首页 > 知识库问答 >
问题:

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

满子实
2023-03-14

我正在评估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 //...
    null

共有1个答案

俞博涛
2023-03-14

我如何在项目的基础上永久设置此选项,这样我就不必一直提供它们了?我可以这样做,使intellij Bazel插件将自动接收它吗?

是的。将此添加到 /.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插件将自动获取这些信息。

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
$ 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)",
)
$ 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,
)
 类似资料:
  • 问题内容: 我正在评估Bazel并尝试对其进行配置,以便它使用与构建时所用的JDK不同的JDK来构建和测试我的Scala项目。 这些是my输出的相关行: 尽管我的软件包管理器似乎已经使用openjdk的较新版本构建了Bazel,但我要构建/测试的项目应改用我在以下位置安装的JDK 。 通过深入研究各种github问题,最终得到了以下解决方案,该解决方案使我能够获得绿色版本: 但是,我仍然对以下内容

  • 问题内容: 之前也曾提出过类似的问题,但由于配置脚本的标志已更改,因此答案似乎不再适用。我正在尝试从x86和x64上的Ubuntu 14.04.5上的git源编译OpenVPN。我已经构建了OpenSSL 1.0.1t并将其安装到/ usr / local / ssl。我尝试过配置选项的各种组合,并且编译器似乎可以识别 完成,没有错误,但结果为。完成安装后,它仍会报告OpenSSL的系统版本: 系

  • 6.3 产品定制配置 每一个 flavors 都可以通过一个闭包配置: android { ... defaultConfig { minSdkVersion 8 versionCode 10 } productFlavors { flavor1 { packageName "com.examp

  • 每个 flavor 都是通过闭包来配置的: android { ... defaultConfig { minSdkVersion 8 versionCode 10 } productFlavors { flavor1 { packageName "com.example.flavor1"

  • null 在这里,当作为spring boot应用程序运行时,我能够指定所需的配置文件。以同样的方式,当我需要使用MAVEN安装与不同的配置文件。在Maven安装目标的Run Configuration中,是否有任何方法将profile指定为VM参数列表的一部分。 我有限制,不能接触现有的java代码。 我使用的是STS IDE,Spring boot 1.5.2.发行版,Java1.8和orac