在 bazel 方面输出文件中累积数据的推荐策略

Recommended strategy to accumulate data in bazel aspects output files

我正在编写一个 post-build 工具,它需要目标 jar 文件列表的位置。 对于这些位置,我在目标列表中有一个 运行s 的方面(使用 --方面 分别针对每个目标)并获取每个目标的 jar 文件路径。

我已经设法在每个目标的输出文件夹中的自定义输出文件中获取每个 jar 文件路径(例如 jar.txt)。

但这意味着我需要分别检查每个 jar.txt 文件以获取位置。

有没有办法在单个文件中累积 jar 文件路径?
类似于:

  1. 尝试在方面中使用追加命令写入同一输出文件夹。我不确定是否可以共享输出文件夹。

  2. 创建一个依赖于所有相关目标的综合目标,然后运行这个目标上的一个方面并积累jar,并在递归返回后才将它们写入根目录。

1. 或 2. 是有效选项吗?
在 bazel 方面输出文件中累积数据的推荐策略是什么?

纳坦,

如果我没理解错的话,您希望将来自每个方面节点的信息传递到单个结果中。为此,请在方面规则实现中构建传递集,并通过 "provider" 机制 [^1] 传递它。我写了一些关于 bazel 方面的例子,也许你会发现它有用[^2]。

  1. https://github.com/pcj/bazel_aspects/blob/master/aspects.bzl#L94-L104

  2. https://github.com/pcj/bazel_aspects

Bazel 不在 Skylark 中提供功能来累积目标图中彼此不相关的目标之间的信息(例如,在命令行中提到的彼此相邻的目标)。

一种可能是编写一个 Skylark 规则,该规则取决于您通常在命令行中提到的所有目标并构建该目标;该规则将能够将每个 Java 目标的类路径整理到一个文件中。

另一种可能性是告诉 Bazel 使用 --experimental_build_event_{json,text,binary}_file 将构建事件(包括指定构建模式扩展到的所有目标的所有输出)写入文件。 ("experimental" 将很快被删除。)。这些文件包含此消息的实例:

https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto