我想为$(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)"],
)
当我将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))
还尝试查看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)"],
)
答案 0 :(得分:0)
你做得对。
我查看了源代码并且你是对的:srcs
,deps
和tools
(如果在规则上定义)被添加到标签集中expand_locations
明白了。仅当使用data
创建LocationExpander
时才会添加allowDataAttributeEntriesInLabel=true
,但不是expand_locations(targets)
。这就是您必须将其添加到$(this).text().split(' ').length;
的原因。