我想向for属性添加$(location)
扩展,在属性中设置依赖项,但失败了:
我在目标中定义了属性中该标签的依赖项,如下所示:rules_scala
jvm_flags
data
label '//src/java/com/google/devtools/build/lib:worker' in $(location) expression is not a declared prerequisite of this rule.
data
scala_specs2_junit_test(
...
data = ["//src/java/com/google/devtools/build/lib:worker"],
jvm_flags = ["-XX:HeapDumpPath=/some/custom/path", "-Dlocation.expanded=$(location //src/java/com/google/devtools/build/lib:worker)"],
)
Run Code Online (Sandbox Code Playgroud)
我看到当我添加ctx.attr.data
到expand_location
呼叫扩展时有效,但我不太确定为什么这不是一个黑客。确实是data
特例吗?
location_expanded_jvm_flags = []
for jvm_flag in jvm_flags:
location_expanded_jvm_flags.append(ctx.expand_location(jvm_flag, ctx.attr.data))
Run Code Online (Sandbox Code Playgroud)
还尝试查看java_*
规则源以了解其工作原理(因为$(location)
那里的扩展支持该data
属性),但找不到相关位置。
完整目标:
scala_specs2_junit_test(
name = "Specs2Tests",
srcs = ["src/main/scala/scala/test/junit/specs2/Specs2Tests.scala"],
deps = [":JUnitCompileTimeDep"],
size = "small",
suffixes = ["Test"],
data = ["//src/java/com/google/devtools/build/lib:worker"],
jvm_flags = ["-XX:HeapDumpPath=/some/custom/path", "-Dlocation.expanded=$(location //src/java/com/google/devtools/build/lib:worker)"],
)
Run Code Online (Sandbox Code Playgroud)
你做对了。
我查看了源代码,您是对的:srcs
、deps
和tools
(如果在规则中定义)被添加到expand_locations
可以理解的标签集中。仅当使用 创建data
时才添加,但事实并非如此。这就是为什么您必须将其添加到.LocationExpander
allowDataAttributeEntriesInLabel=true
expand_locations(targets)
归档时间: |
|
查看次数: |
6466 次 |
最近记录: |