为什么java“可执行”的“执行”路径给了我一个遗产;“外部”;运行文件路径

为什么java“可执行”的“执行”路径给了我一个遗产;“外部”;运行文件路径,java,scala,bazel,Java,Scala,Bazel,假设我有一个最小的ScalaWORKSPACE文件,如下所示: workspace(name = "scala_example") git_repository( name = "io_bazel_rules_scala", commit = "e9e65ada59823c263352d10c30411f4739d5df25", remote = "https://github.com/bazelbuild/rules_scala", ) load("@io_baze

假设我有一个最小的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()
然后是
构建

load("@io_bazel_rules_scala//scala:scala.bzl", "scala_binary")

scala_binary(
    name = "example-bin",
    srcs = glob(["*.scala"]),
    main_class = "Example",
)
还有一个
示例。scala

object Example { def main(args: Array[String]): Unit = println("running") }
我可以运行
bazel run example bin
,一切正常。我的问题是更改了Java二进制路径的设置方式,以使用以下内容:

ctx.attr._java_runtime[java_common.JavaRuntimeInfo].java_executable_exec_path
bazel run --nolegacy_external_runfiles example-bin
…而不是以前的
ctx.executable.\u java.short\u path

在此更改之后,Java二进制路径在路径中包含一个
外部
目录,这似乎是一个遗留的东西(?)。这意味着在进行此更改后,如果我运行以下操作:

ctx.attr._java_runtime[java_common.JavaRuntimeInfo].java_executable_exec_path
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
它还中断了我拥有的一些脚本,这些脚本需要非
外部路径

为什么
java\u executable\u exec\u path给我这个
外部路径?我能给bazel一些选择来说服它不要这样做吗?

很抱歉回复太慢——这似乎是因为Scala规则错误地使用了
java\u executable\u exec\u path
,而他们应该使用
java\u executable\u runfiles\u path

我发送了一个请求修复它,然后我意识到你已经在

由于后者现在可以与Bazel一起在HEAD上使用,因此我至少会删除丑陋的部分