我有两个存储库,客户端和库。
在客户端的 WORKSPACE 文件中,客户端将库作为 http_archive 导入,名称为“foo”。
在客户端内部,我想使用引用库中目标的库宏。我的问题是库宏不知道作为“foo”导入的,所以当宏展开时,找不到目标。
图书馆/工作空间:
workspace(name = "library")
图书馆/some.bzl:
def my_macro():
native.java_library(name = "my_macro_lib",
deps = ["@library//:my_macro_lib_dependnecy"]
)
库/BUILD.bazel:
java_library(name = "my_macro_lib_dependnecy",
...
)
客户/工作空间:
workspace(name = "client")
http_archive(
name = "library",
urls = [...],
strip_prefix = ...,
sha256 = ...,
)
因为两个工作区对库工作区 ( name = "library"
) 使用相同的名称,并且因为宏在其依赖项 ( ) 中引用了工作区名称,所以@library//:my_macro_lib_dependnecy
这是有效的。请注意,这可行,但有一些怪癖将在 0.17.0 中解决