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

javadoc的Bazel规则无法传递输入源,bazel,bazel-rules,Bazel,Bazel Rules,我正在尝试基于创建一个javadoc 我已在项目根目录下的生成文件中添加了以下内容以加载规则: load("//rules:javadoc.bzl", "javadoc") javadoc( name = "api-docs", srcs = glob(["**/*.java"]) ) 但是当我运行它时,它失败了,并且从我使用--sandbox\u debug看到它似乎没有使用任何源文件调用jav

我正在尝试基于
创建一个javadoc 我已在项目根目录下的生成文件中添加了以下内容以加载规则:

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

javadoc(
    name = "api-docs",
    srcs = glob(["**/*.java"])
)
但是当我运行它时,它失败了,并且从我使用
--sandbox\u debug
看到它似乎没有使用任何源文件调用javadoc 具体运行:
bazel构建--sandbox\u调试:api文档

我得到:

以及以后的
javadoc:error-未指定任何包或类。

如果我正确理解报告的错误,我会看到调用了
external/local_jdk/bin/javadoc-quiet-dapi docs
,但没有文件作为输入。

我在这里做错了什么?

glob
不会越过包边界,因此glob不会匹配任何包含
构建
文件的目录。我怀疑您在试图匹配的目录中有一个
生成
文件

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

filegroup(
   name = "javasrcs",
   srcs = glob(["**/*.java"]),
   visibility = ["//visibility:public"],
)
然后在您的顶级
构建
文件中如下引用它:

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

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

假设源代码位于目录
src

中,如果我理解您所说的,那么包中确实有一个
BUILD
文件,其中包含我试图为其创建javadoc的java文件。我可以做些什么来解决这个问题?您可以在包含java文件的包中的
BUILD
文件中创建一个filtegroup,然后在顶级
BUILD
文件中的
javadoc
规则中引用它。您有一个示例代码段如何做到这一点?谷歌搜索“bazel过滤器组”并没有给出任何相关的结果,是这样的吗?道歉;我键入了
//可见性:public
。在您的例子中,顶层引用看起来像
“//src/main/java/com/test:javasrcs”
load("//rules:javadoc.bzl", "javadoc")

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