我想创建一个以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集?