首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将bazel配置为使用特定JVM版本构建/测试

将bazel配置为使用特定JVM版本构建/测试
EN

Stack Overflow用户
提问于 2019-11-25 21:22:38
回答 1查看 3.1K关注 0票数 4

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

以下是来自我的bazel info输出的相关行:

代码语言:javascript
代码运行次数:0
运行
复制
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问题,我得到了以下解决方案,它允许我获得绿色构建:

代码语言:javascript
代码运行次数:0
运行
复制
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插件会自动获得它呢?
  • ,上面的设置到底是什么,是否有一个更简单的方法来实现相同的结果?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-25 22:06:44

如何在项目的基础上永久地设置这个选项,这样我就不必总是提供这些选项了?我是否可以这样做,使intellij插件将自动获得它?

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

代码语言:javascript
代码运行次数:0
运行
复制
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进行选择,这样默认的无配置构建就不会受到影响。

代码语言:javascript
代码运行次数:0
运行
复制
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的位置。

代码语言:javascript
代码运行次数:0
运行
复制
$ 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工具。

代码语言:javascript
代码运行次数:0
运行
复制
$ 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来分离编译主机工具和实际源代码编译。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59040291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档