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

时间:2017-04-30 18:50:53

标签: bazel bazel-aspect

我正在编写一个后期构建工具,需要目标jar文件列表的位置。 对于这些位置,我有一个在目标列表上运行的方面(使用 - aspects 分别针对每个目标),并为每个目标获取jar文件路径。

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

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

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

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

  2. 创建一个依赖于所有相关目标的合成目标,然后在此目标上运行一个方面并累积jar,并在递归之后仅在根处写入它们。

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

2 个答案:

答案 0 :(得分:2)

Bazel不提供Skylark中的设施,用于在目标图中彼此不相关的目标之间累积信息(例如,在命令行中彼此相邻的那些目标)。

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

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

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

答案 1 :(得分:0)

纳坦,

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

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

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