我正在编写一个构建工具,该工具需要目标的JAR文件列表的位置。对于这些位置,我有一个在目标列表上运行的方面(使用 - 方面为每个目标列表(,并为每个目标找到JAR文件路径。
我设法在每个目标的输出文件夹中获取自定义输出文件(例如 jar.txt (中的每个JAR文件路径。
,但这将意味着我需要分别浏览每个jar.txt文件以获取位置。
有没有一种方法可以在一个文件中累积JAR文件路径?
类似:
-
尝试在该方面使用Append命令写入同一输出文件夹。我不确定是否可以使用共享的输出文件夹。
-
创建一个取决于所有相关目标的合成目标,然后在此目标上运行一个方面并积累罐子,仅在递归后才将它们写在根部。
是1.或2.有效的选项?
在Bazel方面积累数据的推荐策略是什么?
bazel不提供Skylark中的facitlities,用于在目标图中累积与彼此无关的目标之间的信息(例如,命令行中彼此之间提到的信息(。
一种可能性是编写一个云雀规则,该规则取决于您通常在命令行中提到的所有目标并构建该目标。该规则将能够将每个Java目标的类路径整理到一个文件。
另一种可能性是告诉巴泽尔使用--experimental_build_event_{json,text,binary}_file
编写构建事件(包括指定构建模式的所有目标的所有输出扩展到(。("实验"将很快删除。(。文件包含此消息的实例:
https://github.com/bazelbuild/bazel/blob/master/src/src/main/java/java/java/google/google/google/devtools/build/lib/build/buildeventstream/proto/proto/build_event_event_event_event_event_vent_stream.stream.proto
natan,
如果我正确理解,您想将每个方面节点的信息传播到一个结果中。为此,请在您的方面规则实现中构建及物集,并通过"提供者"机制[^1]通过它。我写了一些关于巴泽尔方面的示例,也许您会发现它有用[^2]。
-
https://github.com/pcj/bazel_aspects/blob/master/aspects.bzl#l94-l94-l104
-
https://github.com/pcj/bazel_aspects