javadoc 的 Bazel 规则无法传递输入源

Bazel rule for javadoc fails to pass input sources

我正在尝试基于 javadoc.bzl
创建一个 javadoc 我在项目根目录下的 BUILD 文件中添加了加载规则:

load("//rules:javadoc.bzl", "javadoc")

javadoc(
    name = "api-docs",
    srcs = glob(["**/*.java"])
)

但是当我 运行 它失败了,从我使用 --sandbox_debug 看到的情况来看,它似乎没有使用任何源文件调用 javadoc 具体来说 运行ning: bazel build --sandbox_debug :api-docs
我得到:

BUILD:3:8: error executing shell command: '/bin/bash -c mkdir api-docs
external/local_jdk/bin/javadoc -quiet -d api-docs  zip -q -r
bazel-out/darwin-fastbuild/bin/api-docs.zip api-docs/*' failed (Exit
12): sandbox-exec failed: error executing command

以后 javadoc: error - No packages or classes specified.

如果我对报告的错误理解正确,我会看到 external/local_jdk/bin/javadoc -quiet -d api-docs 被调用但没有文件作为输入。
我在这里做错了什么?

glob 不会越过包边界,因此 glob 不会匹配任何包含 BUILD 文件的目录。我怀疑您要匹配的目录中有一个 BUILD 文件。

在您的 src 目录中,将以下内容添加到您的 BUILD 文件

filegroup(
   name = "javasrcs",
   srcs = glob(["**/*.java"]),
   visibility = ["//visibility:public"],
)

然后在您的顶级 BUILD 文件中这样引用它:

load("//rules:javadoc.bzl", "javadoc")

javadoc(
    name = "api-docs",
    srcs = ["//src:javasrcs"],
)

假设源在一个目录中 src