问题标签 [bazel-rules]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
81 浏览

bazel - Question: I am creating an air gapped version of bazel to use. I followed the steps on bazel docs, but getting the following error? Please advice

0 投票
1 回答
315 浏览

bazel - 为气隙环境创建 Bazel 归档 tar

我使用 Bazel 文档中提供的步骤创建了一个 Bazel 归档 tar。除了这个之外,大多数包都在本地加载。请参阅下面的错误。


C:\Developers\examples-master\java-tutorial>bazel build --distdir=C:\Developers\bazel-tar //:ProjectRunner 正在启动本地 Bazel 服务器并连接到它... INFO:Repository remotejdk11_win 实例化于:否堆栈(--record_rule_instantiation_callstack 未启用)存储库规则 http_archive 定义在:C:/users/syuopm/_bazel_syuopm/v5bxa2ms/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31:在警告中:从https 下载: //mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11.0.6-win_x64.zip无法获取的存储库 @remotejdk11_win 中的 jdk。没有这样的包'@remotejdk11_win//':java.io.IOException:下载错误[https://mirror.bazel.build/openjdk/azul-zulu11.37.17-ca-jdk11.0.6/zulu11.37.17-ca-jdk11 .0.6-win_x64.zip] 到 C:/users/syuopm/_bazel_syuopm/v5bxa2ms/external/remotejdk11_win/zulu11.37.17-ca-jdk11.0.6-win_x64.zip: 连接超时错误: 分析目标'//:ProjectRunner ' 失败的; 构建中止:分析失败信息:经过时间:68.089 秒信息:0 个进程。失败:构建未成功完成(加载了 16 个包,配置了 305 个目标)/users/syuopm/_bazel_syuopm/v5bxa2ms/external/remotejdk11_win/zulu11.37.17-ca-jdk11.0.6-win_x64.zip:连接超时错误:分析目标'//:ProjectRunner'失败;构建中止:分析失败信息:经过时间:68.089 秒信息:0 个进程。失败:构建未成功完成(加载了 16 个包,配置了 305 个目标)/users/syuopm/_bazel_syuopm/v5bxa2ms/external/remotejdk11_win/zulu11.37.17-ca-jdk11.0.6-win_x64.zip:连接超时错误:分析目标'//:ProjectRunner'失败;构建中止:分析失败信息:经过时间:68.089 秒信息:0 个进程。失败:构建未成功完成(加载了 16 个包,配置了 305 个目标)

0 投票
1 回答
443 浏览

javascript - 使用 Bazel 构建多语言项目

我有一个 Kotlin JVM 项目,它在本机运行时运行一些 JavaScript。目前,不同的语言源定义在不同的存储库中,JS 文件被 webpack 打包为 JAR,指定为 JVM 项目的依赖项。这很好用,但我想合并这两个存储库,因为它们本质上是耦合的。与其维护大量不同的构建工具,我认为这将是一个学习和使用多语言构建系统的好机会,比如 Bazel。

目前的结构:

项目文件结构

本质上,我正在尝试构建两个主要包。web 包构建正确,我可以通过命令行查看 webpacked 输出。包括完整图片的网络BUILD文件:

另一个重要的包是嵌套//jvm/src/main/java/com/example/bazel/plugin包。这本质上是最终的交付物,它应该是一个 JAR,其中包含作为资源的 Web 包的输出。

这看起来很简单,但是在构建过程中会出现以下错误:

经过一些实验,这似乎是一个尝试将生成的输出捆绑为kt_jvm_library. 如果资源引用另一个包中的有形源文件,那么它就可以正常工作。这里的主要问题是这是否是 Bazel 的正确模式,或者我是否试图滥用这项技术。这似乎是一个相对简单的用例,但文档中有一行最让我担心:

所有规则的不变性是规则生成的文件总是与规则本身属于同一个包;无法将文件生成到另一个包中。但是,规则的输入来自另一个包的情况并不少见。

来自https://docs.bazel.build/versions/master/build-ref.html

任何见解将不胜感激。

0 投票
1 回答
360 浏览

c++ - bazel 立即运行分段错误

我正在尝试在现有的 bazel 项目中使用本地构建的包(这个)。它 bazel 构建时没有任何错误,但是当我尝试 bazel 运行它时,它会立即出现段错误。我尝试在调试模式下构建它,但是当我在调试模式下运行它时,它仍然会立即出现段错误,而没有任何有用的错误消息。

我按照自述文件中的说明构建了外部包,示例运行良好(在 bazel 之外),所以我知道外部库不是问题。

我创建了一个存储库来访问我的WORKSPACE文件中的这个包

approxmvbb.BUILD文件看起来像这样

我试图运行的 cc_binary 看起来像这样

二进制的源代码src/test_approvmvbb.cpp

0 投票
0 回答
618 浏览

bazel - 如何使用 Bazel 正确处理测试覆盖率报告 (HTML) 生成?

目标

我想通过 Bazel 处理生成带有测试覆盖率数据的 HTML 报告的整个过程。

成分

为了实现我的目标,我了解以下组件是必要的:

  • lcov .dat 文件 提供有关在运行特定测试用例时程序的哪些部分实际执行(即“覆盖”)的信息。我可以通过运行为我的项目生成所需的 lcov 文件(我的./bazelw query "attr(name, '.*test_main', //...)" | xargs ./bazelw coverage --combined_report=lcov所有测试目标都命名为test_main,这就是我可以coverage在所有这些目标中执行命令并将结果与--combined_report=lcov​​ ;
  • genhtml : 一个可执行文件,可以解析 lcov 文件并从中生成 HTML 测试报告(最终目标);
  • coverage.blz:一个自定义的 bazel 规则,将.dat文件和genrule二进制文件作为输入并吐出最终的 HTML 及其 deps(图像和其他 HTML);

到目前为止我能做的...

为 genhtml 创建一个可执行脚本

我不确定这是否是最好的方法,但是,在这一点上对我来说似乎是合理的:

创建文件组以访问存储库中的 .dat

遵循 -使用 Bazel 生成覆盖率报告的建议;

这存在于我的存储库的根BUILD文件中

开始我的自定义规则

存档coverage_report.bzl

在自定义规则实现的上下文中,我有以下问题:

  • 问题 1:我不知道此时 .dat 文件是否已经生成,因为它需要bazel coverage运行。我可以从这里强制 bazel 覆盖吗?
  • 问题 2:我不知道如何genhtml在这里引用我的可执行工具。我的计划是做类似的事情genhtml *.dat -o output
  • 问题 3:我不知道如何指定 的输出文件genhtml作为此规则的输出(如您所见,这是我第一次尝试实现自己的规则);

很感谢任何形式的帮助!

参考资料

0 投票
1 回答
124 浏览

bazel - Genrule 不会在最终输出文件中输出“$@”符号

我正在写一个如下的类:

)

当我执行此操作时,我看到了输出

但是,当我打开实际的 shell 脚本文件时,我看到

$@ 符号不再存在!如何使用 Bazel genrule 指令创建一个可以接收来自 shell 的输入的 shell 脚本?

0 投票
2 回答
420 浏览

bazel - Bazel Starlark:如何以程序方式生成 BUILD 文件?

通过 http_archive 下载存档后,我想运行一个脚本以从文件夹结构和其中的 Cmake 文件生成 BUILD 文件(我目前是手动完成的,它很容易编写脚本)。我在 starlark 文档中没有找到任何关于如何打开、读取和写入文件的信息,但是由于 http_archive 本身是从 bzl 文件加载的(虽然还没有找到该文件的源......)并生成 BUILD 文件(通过从档案中解压缩它们)我想必须可以为 http_archive 编写一个包装器,它也会生成 BUILD 文件?

0 投票
0 回答
338 浏览

bazel - 在 bazel 方面的实现中,有没有办法获取工作区根目录的绝对文件系统路径?

我正在尝试在 bazel 方面实现clang 编译数据库的生成。看来这个clang文件的“目录”字段必须指定为绝对路径。现在,当我尝试使用 bazel 方面生成此文件时,所有相关的 bazel API 都会在工作区侧返回路径相对路径。

我的意思是“工作区根” ~/.cache/bazel/_bazel_<user>/<hash>/execroot/__main__

我想了两个技巧来完成这项工作:

  1. 使用ctx.actions.run_shell而不是ctx.actions.write生成文件,shell 可以在其中PWD使用$(realpath ../../../../../execroot/__main__).

我已经验证了它可以工作,但这肯定是不受欢迎的方法,因为 bazel 不能保证沙盒工作路径与工作区根目录的关系,因此很容易跨越 bazel 版本。

  1. 使用脚本生成文件。

这会将文件的生成分成两部分,因为所有编译命令信息仍然必须来自 bazel 方面,这使得维护起来很麻烦。

我想过但没有明显的方法使它起作用的另一种方法是以某种方式将__workspace_dir__变量从WORKSPACE.bazel文件传递到方面上下文,我无论如何都找不到这样做。

那么,有没有什么优雅的方法可以从方面实现上下文中获取这些信息呢?

0 投票
1 回答
1215 浏览

c++ - 在 Bazel 中,如何防止某些 C++ 编译器标志传递给外部依赖项?

我们的项目是用 C++ 编写的,并使用 gRPC 作为依赖项。我们使用 clang 作为编译器。我们使用 设置了 C++ 工具链文件-Wall -Werror,但这会导致 gRPC 本身引发的警告出现问题。

有没有办法阻止 Bazel 将Werror标志应用于 gRPC 文件,但仍将其应用于项目的其他地方?

文件如下所示:

更新 9/2/2020 基于 Ondrej 非常有帮助的解决方案,我通过以下方式解决了这个问题。

  • 从我拥有它的功能中删除-Werror标志(连同其他标志)并进入一个默认禁用的新功能,如下所示:

然后,在我自己项目中每个 BUILD 文件的顶部,添加以下行:

package(features = ["compile_flags_with_werror"])

这具有-Werror在我的项目中编译文件时应用的效果,但在编译任何外部依赖项时不适用。

0 投票
1 回答
1296 浏览

python - 使用 bazel py_binary 传递 python 命令行参数

所以我试图将 python 和 bazel 结合使用,我想知道是否有一种方法可以在通过 bazel 目标运行该脚本时传递 python 脚本参数的值。

所以这个想法是:

我有一些main.py文件接受 args 并执行一些逻辑

通常,为了运行这个脚本,我会运行类似的东西:

python -m main.py --arg1=val1

但现在我有兴趣在执行此脚本的同时为其设置 bazel 目标,例如:

有没有办法使用类似的东西来运行该脚本: bazel run //path/to/py_binary --arg1=val1

如果不是在使用此 bazel 目标时运行该 python 脚本的替代方法是什么?

PS我正在使用Python 3.5+