2

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

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

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

有没有办法在单个文件中累积 jar 文件路径?
就像是:

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

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

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

4

2 回答 2

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

于 2017-06-28T09:46:15.107 回答
1

纳坦,

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

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

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

于 2017-04-30T21:10:39.777 回答