1

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

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

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

4

1 回答 1

1

图书馆/工作空间:
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 中解决

于 2018-08-12T04:29:47.427 回答