为什么 java_executable_exec_path 给我遗留的 "external" 运行文件路径
Why is java_executable_exec_path giving me a legacy "external" runfiles path
假设我有一个像这样的最小 Scala WORKSPACE
文件:
workspace(name = "scala_example")
git_repository(
name = "io_bazel_rules_scala",
commit = "e9e65ada59823c263352d10c30411f4739d5df25",
remote = "https://github.com/bazelbuild/rules_scala",
)
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories")
scala_repositories()
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
scala_register_toolchains()
然后 BUILD
:
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_binary")
scala_binary(
name = "example-bin",
srcs = glob(["*.scala"]),
main_class = "Example",
)
还有一个 Example.scala
:
object Example { def main(args: Array[String]): Unit = println("running") }
我可以 运行 bazel run example-bin
并且一切正常。我的问题是 this recent rules_scala PR 更改了 Java 二进制路径设置为使用以下内容的方式:
ctx.attr._java_runtime[java_common.JavaRuntimeInfo].java_executable_exec_path
…代替之前的ctx.executable._java.short_path
.
此更改后 Java 二进制路径在路径中包含一个 external
目录,这似乎是遗留的东西(?)。这意味着在这次更改之后,如果我 运行 以下内容:
bazel run --nolegacy_external_runfiles example-bin
它不再有效:
INFO: Running command line: bazel-bin/example-bin
.../.cache/bazel/_bazel_travis/03e97e9dbbfe483081a6eca2764532e8/execroot/scala_example/bazel-out/k8-fastbuild/bin/example-bin.runfiles/scala_example/example-bin_wrapper.sh: line 4: .../.cache/bazel/_bazel_travis/03e97e9dbbfe483081a6eca2764532e8/execroot/scala_example/bazel-out/k8-fastbuild/bin/example-bin.runfiles/scala_example/external/local_jdk/bin/java: No such file or directory
ERROR: Non-zero return code '127' from command: Process exited with status 127
它还破坏了我的一些预期非external
路径的脚本。
为什么 java_executable_exec_path
给我这个 external
路径?我可以给 bazel 一些选项来说服它不要这样做吗?
抱歉回复缓慢——这似乎是因为 Scala 规则错误地使用了 java_executable_exec_path
而他们应该使用 java_executable_runfiles_path
.
我发送了一个 pull request 来修复它,然后我意识到你已经在 https://github.com/bazelbuild/rules_scala/commit/4235ef58782ce2ec82981ea70b808397b64fe7df
由于后者现在可以通过 Bazel 在 HEAD 获得,我至少会删除丑陋的部分。
假设我有一个像这样的最小 Scala WORKSPACE
文件:
workspace(name = "scala_example")
git_repository(
name = "io_bazel_rules_scala",
commit = "e9e65ada59823c263352d10c30411f4739d5df25",
remote = "https://github.com/bazelbuild/rules_scala",
)
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories")
scala_repositories()
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
scala_register_toolchains()
然后 BUILD
:
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_binary")
scala_binary(
name = "example-bin",
srcs = glob(["*.scala"]),
main_class = "Example",
)
还有一个 Example.scala
:
object Example { def main(args: Array[String]): Unit = println("running") }
我可以 运行 bazel run example-bin
并且一切正常。我的问题是 this recent rules_scala PR 更改了 Java 二进制路径设置为使用以下内容的方式:
ctx.attr._java_runtime[java_common.JavaRuntimeInfo].java_executable_exec_path
…代替之前的ctx.executable._java.short_path
.
此更改后 Java 二进制路径在路径中包含一个 external
目录,这似乎是遗留的东西(?)。这意味着在这次更改之后,如果我 运行 以下内容:
bazel run --nolegacy_external_runfiles example-bin
它不再有效:
INFO: Running command line: bazel-bin/example-bin
.../.cache/bazel/_bazel_travis/03e97e9dbbfe483081a6eca2764532e8/execroot/scala_example/bazel-out/k8-fastbuild/bin/example-bin.runfiles/scala_example/example-bin_wrapper.sh: line 4: .../.cache/bazel/_bazel_travis/03e97e9dbbfe483081a6eca2764532e8/execroot/scala_example/bazel-out/k8-fastbuild/bin/example-bin.runfiles/scala_example/external/local_jdk/bin/java: No such file or directory
ERROR: Non-zero return code '127' from command: Process exited with status 127
它还破坏了我的一些预期非external
路径的脚本。
为什么 java_executable_exec_path
给我这个 external
路径?我可以给 bazel 一些选项来说服它不要这样做吗?
抱歉回复缓慢——这似乎是因为 Scala 规则错误地使用了 java_executable_exec_path
而他们应该使用 java_executable_runfiles_path
.
我发送了一个 pull request 来修复它,然后我意识到你已经在 https://github.com/bazelbuild/rules_scala/commit/4235ef58782ce2ec82981ea70b808397b64fe7df
由于后者现在可以通过 Bazel 在 HEAD 获得,我至少会删除丑陋的部分。