Skylark - может ли правило получить доступ к атрибутам другого правила из его метки?

Этот вопрос совмещает эту проблему с github. Однако я столкнулся с этой проблемой еще в одном контексте.

Контекст

В Bazel есть два правила репозитория: maven_jar и maven_server.

maven_jar(name, artifact, repository, server, sha1)

maven_server(name, repository, settings)

Атрибут сервера правила maven_jar - это метка, указывающая на некоторую цель maven_server.

В настоящее время, всякий раз, когда предоставляется атрибут сервера, maven_jar определяет ошибки.

Чего бы я хотел добиться

В функции реализации maven_jar я хотел бы получить доступ к атрибутам maven_server. В частности, я хотел бы сделать что-то вроде:

def _impl(rtx):
     settings_attr = rtx.attr.server.getSettings()

     # alternatively
     settings_attr = rtx.attr.server.getAttributes().settings

Поддерживается ли такое поведение? Если нет, то как я могу это приблизить?

Атрибут сервера - это метка, поэтому я не уверен, можно ли получить эти значения, используя его провайдеры / аспекты.


person petros-eskinder    schedule 19.07.2017    source источник
comment
Я не могу говорить о правилах maven (я их не использую). Но я думаю, что вам нужна концепция Bazel Providers. Это позволяет правилам получать информацию от своих зависимостей.   -  person zlalanne    schedule 20.07.2017
comment
К сожалению, правила репозитория больше похожи на макросы и не имеют поставщиков.   -  person kristina    schedule 20.07.2017


Ответы (1)


Правила репозитория - это макросы, поэтому у них нет провайдеров, как у "обычных" правил. Таким образом, если вы указываете атрибут метки, это должен быть исходный файл.

Поскольку settings.xml не должен быть привязан к проекту, я думаю, что для maven_jar имеет смысл использовать файл settings.xml пользователя / системы, как описано в Документы Maven:

Файл settings.xml может находиться в двух местах:

  • Установка Maven: $ {maven.home} /conf/settings.xml
  • Пользовательская установка: $ {user.home} /. M2 / settings.xml.

Первый файл settings.xml также называется глобальными настройками, второй файл settings.xml называется пользовательскими настройками. Если существуют оба файла, их содержимое объединяется, при этом определяемый пользователем файл settings.xml является доминирующим.

person kristina    schedule 20.07.2017