我正在编写一个后期构建工具,需要目标jar文件列表的位置。 对于这些位置,我有一个在目标列表上运行的方面(使用 - aspects 分别针对每个目标),并为每个目标获取jar文件路径。
我设法在每个目标的输出文件夹中的自定义输出文件(例如 jar.txt )中获取每个jar文件路径。
但这意味着我需要分别查看每个jar.txt文件以获取位置。
有没有办法在单个文件中累积jar文件路径? 类似的东西:
尝试使用方面中的append命令写入相同的输出文件夹。我不确定是否可以使用共享输出文件夹。
创建一个依赖于所有相关目标的合成目标,然后在此目标上运行一个方面并累积jar,并在递归之后仅在根处写入它们。
是1.还是2.有效选项?
在bazel方面输出文件中积累数据的推荐策略是什么?
答案 0 :(得分:2)
Bazel不提供Skylark中的设施,用于在目标图中彼此不相关的目标之间累积信息(例如,在命令行中彼此相邻的那些目标)。
一种可能性是编写一个Skylark规则,该规则取决于您在命令行中经常提到的所有目标并构建该目标;该规则将能够将每个Java目标的类路径整理为单个文件。
另一种可能性是告诉Bazel使用--experimental_build_event_{json,text,binary}_file
将构建事件(包括指定构建模式扩展到的所有目标的所有输出)写入文件。 (“实验”将很快被删除。)这些文件包含此消息的实例:
答案 1 :(得分:0)
纳坦,
如果我理解正确,您希望将每个方面节点的信息传递传递到单个结果中。为此,请在方面规则实现中构建传递集,并通过“提供者”机制[^ 1]传递它。我写了一些关于bazel方面的例子,也许你会发现它很有用[^ 2]。