是否可以使用Bazel Query输出隐式(或任何)规则的完整语法?

2022-08-21 00:00:00 bazel java bazel-java

我的目标是编写一个新的显式规则,该规则等同于内部规则,但稍作修改(嵌入某些依赖项,但不嵌入其他依赖项)。

假设我有如下规则:

java_binary(
    name = "cipher_jar",
    srcs = glob([
        "*.java",
    ]),
    ...
)

有一个隐式规则,如下所示:

bazel query  "//cipher:cipher_jar_deploy.jar"

是否有一些query我可以运行以强制Bazel输出与此隐式规则的上述java_binary规则等价的内容?


看起来使用--output=build只是获取原始规则,而我需要一个显式告诉Bazel嵌入依赖项的规则。


解决方案

内置Bazel Java规则(如java_binaryjava_library)的逻辑是用JAVA编写的,位于Bazel二进制文件中。然而,Java规则使用的许多基本操作都有一个Starlark API。这些规则可用于制定定制的Java规则。事实上,有一个正在进行的项目,用Starlark实现透明地替换内置的Bazel Java规则。

相关文章