我想向for属性添加$(location)扩展,在属性中设置依赖项,但失败了:
我在目标中定义了属性中该标签的依赖项,如下所示:rules_scalajvm_flagsdata
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时才添加,但事实并非如此。这就是为什么您必须将其添加到.LocationExpanderallowDataAttributeEntriesInLabel=trueexpand_locations(targets)