在带有标签的存储库中使用 bazel 宏

Using bazel macros across repositories with labels

我有两个存储库,客户端和库。

在客户端的 WORKSPACE 文件中,客户端将库作为 http_archive 导入,名称为 "foo"。

在客户端内部,我想使用在库中引用目标的库宏。我的问题是库宏不知道作为 "foo" 导入的,因此当宏展开时找不到目标。

library/WORKSPACE:
workspace(name = "library") library/some.bzl:

def my_macro():
  native.java_library(name = "my_macro_lib",
    deps = ["@library//:my_macro_lib_dependnecy"]
  )

library/BUILD.bazel:

java_library(name = "my_macro_lib_dependnecy",
  ...
)

client/WORKSPACE:

workspace(name = "client")
http_archive(
             name = "library",
             urls = [...],
             strip_prefix = ...,
             sha256 = ...,
)

因为两个工作区对库工作区使用相同的名称 (name = "library"),并且因为宏在其依赖项中引用工作区名称 (@library//:my_macro_lib_dependnecy),所以这是有效的。 请注意,这可行,但有一些怪癖,将在 0.17.0

中解决