从Bazelv0.19开始,如果您有引用@bazel_tools//tools/jdk:jar的Starlark (以前称为"Skylark")代码,您在构建时会看到这样的消息:
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问题的内容似乎没有解决这个特定的问题。
发布于 2018-10-30 19:22:22
我偶然发现对巴泽尔的承诺对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上使用。
也见,一个简单示例的拉请求。
发布于 2018-10-31 16:07:28
因为我对jar工具的引用是在顶级宏中的泛型规则中,而不是在规则中,所以我无法使用Rodrigo的答案中的方法。相反,我显式地引用了current_java_runtime工具链,然后能够使用JAVABASE使变量作为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>]
)https://stackoverflow.com/questions/53066974
复制相似问题