巴泽尔的$地点扩张

Itt*_*tai 6 bazel

我想向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.dataexpand_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)

Lás*_*zló 1

你做对了。

我查看了源代码,您是对的:srcsdepstools(如果在规则中定义)被添加到expand_locations可以理解的标签集中。仅当使用 创建data时才添加,但事实并非如此。这就是为什么您必须将其添加到.LocationExpanderallowDataAttributeEntriesInLabel=trueexpand_locations(targets)