$Расширение местоположения в Базеле

Я хочу добавить расширение $(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)"],
)

person Ittai    schedule 15.05.2017    source источник
comment
Как вы думаете, почему добавление data к expand_location(targets) является хаком? Насколько я понимаю, документы, которые являются правильный способ сделать это.   -  person László    schedule 16.05.2017
comment
Почему данные разные? Я не вижу в документах ничего конкретного об атрибуте данных.   -  person Ittai    schedule 16.05.2017
comment
Отличается от чего? Существуют ли атрибуты, по которым expand_location автоматически ищет цели?   -  person László    schedule 16.05.2017
comment
Разве это не работает автоматически для депов? Знаете ли вы, что такое список правил Java?   -  person Ittai    schedule 16.05.2017
comment
Я на самом деле не знаю. Я был бы удивлен, если бы deps были в специальном регистре. Вы использовали его ранее с deps без передачи целей expand_location?   -  person László    schedule 16.05.2017
comment
Только что сделал небольшой тест, в котором я изменил data на deps в своем тесте (github.com/bazelbuild/rules_scala/blob/master/test/BUILD#L328) и удалил аргумент ctx.attr.data для расширения, и он работает. runtime_deps кстати, не работает из коробки и тоже требует передачи в качестве аргумента.   -  person Ittai    schedule 17.05.2017
comment
Спасибо за проведение этого эксперимента. Отвечу нормальным ответом.   -  person László    schedule 17.05.2017


Ответы (1)


Ты делаешь это правильно.

Я посмотрел исходный код, и вы правы: srcs, deps и tools (если они определены в правиле) добавляются к набору меток, понятных expand_locations. data добавляется, только если LocationExpander создается с помощью allowDataAttributeEntriesInLabel=true, а это не так. Вот почему вы должны добавить его в expand_locations(targets).

person László    schedule 17.05.2017
comment
Спасибо! Правила Java поддерживают расширение местоположения для данных и времени выполнения, верно? - person Ittai; 17.05.2017
comment
Я что-то пробовал (думаю данные). Думал, может быть ты знаешь. Спасибо. - person Ittai; 17.05.2017