Я наткнулся на коммит на 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
.
См. Также, запрос на извлечение с более простым примером .