Bazel 中的 $location 扩展
$location expansion in Bazel
我想为 jvm_flags
属性向 rules_scala
添加 $(location)
扩展,我在 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
调用扩展时有效,但我不确定为什么这不是 hack。 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)"],
)
你做得对。
我查看了源代码,你是对的:srcs
、deps
和 tools
(如果在规则中定义)被添加到标签集expand_locations
明白了。 data
仅当 LocationExpander
是使用 allowDataAttributeEntriesInLabel=true
创建时才添加,但事实并非如此。这就是为什么你必须将它添加到 expand_locations(targets)
.
我想为 jvm_flags
属性向 rules_scala
添加 $(location)
扩展,我在 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
调用扩展时有效,但我不确定为什么这不是 hack。 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)"],
)
你做得对。
我查看了源代码,你是对的:srcs
、deps
和 tools
(如果在规则中定义)被添加到标签集expand_locations
明白了。 data
仅当 LocationExpander
是使用 allowDataAttributeEntriesInLabel=true
创建时才添加,但事实并非如此。这就是为什么你必须将它添加到 expand_locations(targets)
.