Skylark - 规则可以从其标签访问另一个规则的属性吗?

时间:2017-07-19 12:22:40

标签: bazel

这个问题背负着this github issue。但是,我在另一个上下文中遇到过这个问题。

上下文

在Bazel中,有两个存储库规则,maven_jar和maven_server。

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

maven_server(name, repository, settings)

maven_jar规则的server属性是指向某个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

是否支持此行为?如果没有,我可以用任何方式估算它吗?

服务器属性是一个标签,所以我不确定是否可以使用其提供者/方面获取这些值。

1 个答案:

答案 0 :(得分:2)

存储库规则是宏,因此它们没有相同的提供商"正常"规则。因此,如果指定label属性,它基本上必须是源文件。

由于settings.xml不是特定于项目的,我认为maven_jar使用用户/系统的settings.xml更有意义,如Maven docs

  

settings.xml文件可能存在两个位置:

     
      
  • Maven安装:$ {maven.home} /conf/settings.xml
  •   
  • 用户的安装:$ {user.home} /.m2 / settings.xml
  •   
     

也调用以前的settings.xml   全局设置,后面的settings.xml称为user   设置。如果两个文件都存在,那么它们的内容将被合并   用户特定的settings.xml占主导地位。