如何使用Bazel方面传播数据构建链



假设我有一个简单的Java程序,其中包括2个类:

ExampleExample2

和另一个使用这两个类的类:

ExamplesUsage

我有相应的Bazel构建目标Java_library: exampleexample2examples_usage

因此,在构建示例_usage之前,需要对exampleexample2进行编译。

我想使用Bazel方面的传播技术从所有三个目标中积累信息,我该如何做?

这是累积此构建链中源文件数量的示例:

def _counter_aspect_impl(target, ctx):
  sources_count = len(ctx.rule.attr.srcs)
  print("%s: own amount - %s" % (target.label.name , sources_count))
  for dep in ctx.rule.attr.deps:
      sources_count = sources_count + dep.count
  print("%s: including deps: %s" % (target.label.name , sources_count))
  return struct(count = sources_count)
counter_aspect = aspect(implementation = _counter_aspect_impl,
  attr_aspects = ["deps"]
)

如果我们在假设的Java程序上运行它,我们将获得以下输出:

example2: own amount - 1.
example2: including deps: 1.
example: own amount - 1.
example: including deps: 1.
examples_usage: own amount - 1.
examples_usage: including deps: 3.

您可以看到"依赖关系"方面首先运行,只有运行"依赖"目标方面。

当然要实际利用这些信息,需要调用某些ctx.actionctx.file_action才能持续到收集的数据

相关内容

  • 没有找到相关文章

最新更新