$ Bazel的位置扩张

时间:2017-05-15 15:01:18

标签: bazel

我想为$(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)"],
)

1 个答案:

答案 0 :(得分:0)

你做得对。

我查看了源代码并且你是对的:srcsdepstools(如果在规则上定义)被添加到标签集中expand_locations明白了。仅当使用data创建LocationExpander时才会添加allowDataAttributeEntriesInLabel=true,但不是expand_locations(targets)。这就是您必须将其添加到$(this).text().split(' ').length;的原因。