Использование макросов Bazel в репозиториях с метками

У меня есть два репозитория, Клиент и Библиотека.

Внутри файла WORKSPACE Клиента Клиент импортирует Библиотеку как http_archive с именем "foo".

Внутри клиента я хочу использовать макросы библиотеки, которые ссылаются на цели внутри библиотеки. Моя проблема в том, что макросы библиотеки не знают, что они были импортированы как "foo", поэтому при расширении макроса цели не обнаруживаются.

1 ответ

Решение

Библиотека /WORKSPACE:
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:

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

Поскольку оба рабочих пространства используют одно и то же имя для рабочего пространства библиотеки (name = "library") и потому что макрос ссылается на имя рабочего пространства в его зависимостях (@library//:my_macro_lib_dependnecy) это работает. Обратите внимание, что это работает, но есть некоторые причуды, которые будут решены в 0.17.0

Другие вопросы по тегам