是否可以从另一个方面的上下文中访问一个方面

时间:2019-02-28 19:04:48

标签: bazel starlark

我想创建一个以proto_library和java_proto_library为输入的Bazel规则。 它根据提供的原型生成Java代码,并使用提供的java_deps编译新代码并返回JavaInfo。 生成的代码的依赖关系树是原型的依赖关系树的子集。

为了避免不同规则之间的编译重复,我想使用方面来实现这一点。 但是,在此方面,我看不到调用java_common.compile的方法,因为我看不到在方面上下文中获取正确的Java依赖项的方法。

规则调用应如下所示:

example_library(
    name = "foo_example_proto", 
    deps = [":foo_proto"], # a single proto rule 
    java_deps = [":foo_java_proto"], # a single java rule corresponding to the proto rule
)

规则定义:

example_library = rule(
    attrs = {
        "deps": attr.label_list(
            providers = ["proto"],
            aspects = [example_aspect],
            mandatory = True,
        ),
        "java_deps": attr.label_list(
            providers = ["java"],
            mandatory = True,
        ),
    },
    provides = [JavaInfo],
    implementation = _rule_impl,
)

我完全理解仅允许将字符串值用作参数化方面的属性的原因,从而不可能简单地将java_deps从规则传递到方面。 还有什么其他方法可以从方面实现中获取正确的java_deps集?

0 个答案:

没有答案