Как я могу использовать инструмент JAR с Bazel v0.19 +? - PullRequest
0 голосов
/ 30 октября 2018

Начиная с Bazel v0.19, если у вас есть код Starlark (ранее известный как «Жаворонок»), который ссылается на @bazel_tools//tools/jdk:jar, вы видите такие сообщения во время сборки:

WARNING: <trimmed-path>/external/bazel_tools/tools/jdk/BUILD:79:1: in alias rule @bazel_tools//tools/jdk:jar: target '@bazel_tools//tools/jdk:jar' depends on deprecated target '@local_jdk//:jar': Don't depend on targets in the JDK workspace; use @bazel_tools//tools/jdk:current_java_runtime instead (see https://github.com/bazelbuild/bazel/issues/5594)

Я думаю, я мог бы заставить все работать с @bazel_tools//tools/jdk:current_java_runtime, если бы я хотел получить доступ к команде java, но я не уверен, что мне нужно сделать, чтобы заставить работать инструмент jar. Содержание связанной проблемы GitHub , похоже, не решает эту конкретную проблему.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Поскольку моя ссылка на инструмент jar находится внутри genrule внутри макроса верхнего уровня, а не как правило, я не смог использовать подход из ответа Родриго. Вместо этого я явно сослался на цепочку инструментов current_java_runtime и смог использовать переменную JAVABASE make в качестве базового пути для инструмента jar.

native.genrule(
    name = genjar_rule,
    srcs = [<rules that create files being jar'd>],
    cmd = "some_script.sh $(JAVABASE)/bin/jar $@ $(SRCS)",
    tools = ["some_script.sh", "@bazel_tools//tools/jdk:current_java_runtime"],
    toolchains = ["@bazel_tools//tools/jdk:current_java_runtime"],
    outs = [<some outputs>]
)
0 голосов
/ 30 октября 2018

Я наткнулся на коммит на Bazel , который вносит аналогичную корректировку в Java-правила Starlark. Он использует следующий шаблон: (я несколько отредактировал код)

# in the rule attrs:
    "_jdk": attr.label(
        default = Label("//tools/jdk:current_java_runtime"),
        providers = [java_common.JavaRuntimeInfo],
    ),

# then in the rule implementation:
    java_runtime = ctx.attr._jdk[java_common.JavaRuntimeInfo]
    jar_path = "%s/bin/jar" % java_runtime.java_home
     ctx.action(
         inputs = ctx.files._jdk + other inputs,
         outputs = [deploy_jar],
         command = "%s cmf %s" % (jar_path, input_files),
     )

Кроме того, java доступно в str(java_runtime.java_executable_exec_path) и javac в "%s/bin/javac" % java_runtime.java_home.

См. Также, запрос на извлечение с более простым примером .

...