云雀 - 一条规则可以从其标签访问另一条规则的属性吗?
Skylark - can a rule access the attributes of another rule from its label?
这个问题搭载this github issue。但是,我 运行 在另一个上下文中讨论了这个问题。
上下文
在 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
是否支持这种行为?如果没有,我有什么办法可以近似吗?
服务器属性是一个标签,所以我不确定是否可以使用其providers/aspects获得这些值。
存储库规则是宏,因此它们没有像 "normal" 规则那样的提供者。因此,如果您指定一个标签属性,它基本上必须是一个源文件。
由于 settings.xml 不应该是特定于项目的,我认为 maven_jar
使用 users/system 的 settings.xml 更有意义,如 Maven docs:
中所述
There are two locations where a settings.xml file may live:
- The Maven install: ${maven.home}/conf/settings.xml
- A user’s install: ${user.home}/.m2/settings.xml
The former settings.xml are also called
global settings, the latter settings.xml are referred to as user
settings. If both files exists, their contents gets merged, with the
user-specific settings.xml being dominant.
这个问题搭载this github issue。但是,我 运行 在另一个上下文中讨论了这个问题。
上下文
在 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
是否支持这种行为?如果没有,我有什么办法可以近似吗?
服务器属性是一个标签,所以我不确定是否可以使用其providers/aspects获得这些值。
存储库规则是宏,因此它们没有像 "normal" 规则那样的提供者。因此,如果您指定一个标签属性,它基本上必须是一个源文件。
由于 settings.xml 不应该是特定于项目的,我认为 maven_jar
使用 users/system 的 settings.xml 更有意义,如 Maven docs:
There are two locations where a settings.xml file may live:
- The Maven install: ${maven.home}/conf/settings.xml
- A user’s install: ${user.home}/.m2/settings.xml
The former settings.xml are also called global settings, the latter settings.xml are referred to as user settings. If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.