Use the local JDK as the default target javabase

and continue to use the embedded JDK as the default host_javabase.

PiperOrigin-RevId: 195281669
Change-Id: I323a36a5cc9df05c7404d0e38281eaf9dd2d49fc
diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index 9f53d1b..04e41a6 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -349,6 +349,7 @@
       --output_base=${OUTPUT_DIR}/out \
       --output_user_root=${OUTPUT_DIR}/user_root \
       --install_md5= \
+      --default_system_javabase="${JAVA_HOME}" \
       --workspace_directory="$(get_cwd)" \
       --nofatal_event_bus_exceptions \
       ${BAZEL_DIR_STARTUP_OPTIONS} \
diff --git a/src/BUILD b/src/BUILD
index 8f5da4f..c625284 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -358,10 +358,7 @@
     ],
     outs = ["derived_java_srcs.zip"],
     cmd = "$(location :combine_derived_java_srcs.sh) $(JAVABASE) $@ $(SRCS)",
-    # Technically, this should be prefixed with @bazel_tools, but in order to
-    # avoid having to wait a Bazel release which has this target under
-    # @bazel_tools, we use it from the main repository. It's the same anyway.
-    toolchains = ["@bazel_tools//tools/jdk:current_java_runtime"],
+    toolchains = ["@bazel_tools//tools/jdk:current_host_java_runtime"],
     tools = ["combine_derived_java_srcs.sh"],
     visibility = ["//:__pkg__"],
 )
diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index 6c9aea3..331c4c2 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -505,6 +505,7 @@
                    blaze::ConvertPath(globals->options->output_base));
   result.push_back("--workspace_directory=" +
                    blaze::ConvertPath(globals->workspace));
+  result.push_back("--default_system_javabase=" + GetSystemJavabase());
 
   if (!globals->options->server_jvm_out.empty()) {
     result.push_back("--server_jvm_out=" + globals->options->server_jvm_out);
diff --git a/src/main/cpp/blaze_util_darwin.cc b/src/main/cpp/blaze_util_darwin.cc
index 4bc3990..c925e2e 100644
--- a/src/main/cpp/blaze_util_darwin.cc
+++ b/src/main/cpp/blaze_util_darwin.cc
@@ -159,7 +159,7 @@
   return blaze_util::ends_with(filename, ".dylib");
 }
 
-string GetDefaultHostJavabase() {
+string GetSystemJavabase() {
   string java_home = GetEnv("JAVA_HOME");
   if (!java_home.empty()) {
     return java_home;
@@ -167,23 +167,19 @@
 
   FILE *output = popen("/usr/libexec/java_home -v 1.7+", "r");
   if (output == NULL) {
-    BAZEL_DIE(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR)
-        << "Could not run /usr/libexec/java_home: " << GetLastErrorString();
+    return "";
   }
 
   char buf[512];
   char *result = fgets(buf, sizeof(buf), output);
   pclose(output);
   if (result == NULL) {
-    BAZEL_DIE(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR)
-        << "No output from /usr/libexec/java_home";
+    return "";
   }
 
   string javabase = buf;
   if (javabase.empty()) {
-    BAZEL_DIE(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR)
-        << "Empty output from /usr/libexec/java_home - install a JDK, or "
-           "install a JRE and point your JAVA_HOME to it";
+    return "";
   }
 
   // The output ends with a \n, trim it off.
diff --git a/src/main/cpp/blaze_util_freebsd.cc b/src/main/cpp/blaze_util_freebsd.cc
index 4b27b42..0d19682 100644
--- a/src/main/cpp/blaze_util_freebsd.cc
+++ b/src/main/cpp/blaze_util_freebsd.cc
@@ -143,7 +143,7 @@
   return blaze_util::ends_with(filename, ".so");
 }
 
-string GetDefaultHostJavabase() {
+string GetSystemJavabase() {
   // if JAVA_HOME is defined, then use it as default.
   string javahome = GetEnv("JAVA_HOME");
   return !javahome.empty() ? javahome : "/usr/local/openjdk8";
diff --git a/src/main/cpp/blaze_util_linux.cc b/src/main/cpp/blaze_util_linux.cc
index ba0320d..4f01ba8 100644
--- a/src/main/cpp/blaze_util_linux.cc
+++ b/src/main/cpp/blaze_util_linux.cc
@@ -146,8 +146,7 @@
 static string Which(const string &executable) {
   string path(GetEnv("PATH"));
   if (path.empty()) {
-    BAZEL_DIE(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR)
-        << "Could not get PATH to find " << executable;
+    return "";
   }
 
   vector<string> pieces = blaze_util::Split(path, ':');
@@ -167,7 +166,7 @@
   return "";
 }
 
-string GetDefaultHostJavabase() {
+string GetSystemJavabase() {
   // if JAVA_HOME is defined, then use it as default.
   string javahome = GetEnv("JAVA_HOME");
   if (!javahome.empty()) {
@@ -177,15 +176,13 @@
   // which javac
   string javac_dir = Which("javac");
   if (javac_dir.empty()) {
-    BAZEL_DIE(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR)
-        << "Could not find javac";
+    return "";
   }
 
   // Resolve all symlinks.
   char resolved_path[PATH_MAX];
   if (realpath(javac_dir.c_str(), resolved_path) == NULL) {
-    BAZEL_DIE(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR)
-        << "Could not resolve javac directory: " << GetLastErrorString();
+    return "";
   }
   javac_dir = resolved_path;
 
diff --git a/src/main/cpp/blaze_util_platform.h b/src/main/cpp/blaze_util_platform.h
index 50ac219..6de5eb1 100644
--- a/src/main/cpp/blaze_util_platform.h
+++ b/src/main/cpp/blaze_util_platform.h
@@ -84,9 +84,10 @@
 
 bool IsSharedLibrary(const std::string& filename);
 
-// Return the default path to the JDK used to run Blaze itself
-// (must be an absolute directory).
-std::string GetDefaultHostJavabase();
+// Returns the absolute path to the user's local JDK install, to be used as
+// the default target javabase and as a fall-back host_javabase. This is not
+// the embedded JDK.
+std::string GetSystemJavabase();
 
 // Return the path to the JVM binary relative to a javabase, e.g. "bin/java".
 std::string GetJavaBinaryUnderJavabase();
diff --git a/src/main/cpp/blaze_util_windows.cc b/src/main/cpp/blaze_util_windows.cc
index efd0d72..565e887 100644
--- a/src/main/cpp/blaze_util_windows.cc
+++ b/src/main/cpp/blaze_util_windows.cc
@@ -250,11 +250,10 @@
   return blaze_util::ends_with(filename, ".dll");
 }
 
-string GetDefaultHostJavabase() {
+string GetSystemJavabase() {
   string javahome(GetEnv("JAVA_HOME"));
   if (javahome.empty()) {
-    BAZEL_DIE(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR)
-        << "Error: JAVA_HOME not set.";
+    return "";
   }
   return javahome;
 }
diff --git a/src/main/cpp/startup_options.cc b/src/main/cpp/startup_options.cc
index 1f9bc8b..f2cc25d 100644
--- a/src/main/cpp/startup_options.cc
+++ b/src/main/cpp/startup_options.cc
@@ -392,30 +392,34 @@
   return blaze_exit_code::SUCCESS;
 }
 
-string StartupOptions::GetDefaultHostJavabase() const {
-  return blaze::GetDefaultHostJavabase();
+string StartupOptions::GetSystemJavabase() const {
+  return blaze::GetSystemJavabase();
 }
 
 string StartupOptions::GetHostJavabase() {
   // 1) Allow overriding the host_javabase via --host_javabase.
-  if (host_javabase.empty()) {
-    if (default_host_javabase.empty()) {
-      string bundled_jre_path = blaze_util::JoinPath(
-          install_base, "_embedded_binaries/embedded_tools/jdk");
-      if (blaze_util::CanExecuteFile(blaze_util::JoinPath(
-              bundled_jre_path, GetJavaBinaryUnderJavabase()))) {
-        // 2) Use a bundled JVM if we have one.
-        default_host_javabase = bundled_jre_path;
-      } else {
-        // 3) Otherwise fall back to using the default system JVM.
-        default_host_javabase = GetDefaultHostJavabase();
-      }
-    }
-
-    return default_host_javabase;
-  } else {
+  if (!host_javabase.empty()) {
     return host_javabase;
   }
+  if (default_host_javabase.empty()) {
+    string bundled_jre_path = blaze_util::JoinPath(
+        install_base, "_embedded_binaries/embedded_tools/jdk");
+    if (blaze_util::CanExecuteFile(blaze_util::JoinPath(
+            bundled_jre_path, GetJavaBinaryUnderJavabase()))) {
+      // 2) Use a bundled JVM if we have one.
+      default_host_javabase = bundled_jre_path;
+    } else {
+      // 3) Otherwise fall back to using the default system JVM.
+      string system_javabase = GetSystemJavabase();
+      if (system_javabase.empty()) {
+        BAZEL_DIE(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR)
+            << "Could not find system javabase. Ensure JAVA_HOME is set, or "
+               "javac is on your PATH.";
+      }
+      default_host_javabase = system_javabase;
+    }
+  }
+  return default_host_javabase;
 }
 
 string StartupOptions::GetExplicitHostJavabase() const {
diff --git a/src/main/cpp/startup_options.h b/src/main/cpp/startup_options.h
index 91a4ab7..242a383 100644
--- a/src/main/cpp/startup_options.h
+++ b/src/main/cpp/startup_options.h
@@ -133,9 +133,10 @@
       const char *arg, const char *next_arg, const std::string &rcfile,
       const char **value, bool *is_processed, std::string *error) = 0;
 
-  // Return the default path to the JDK used to run Blaze itself
-  // (must be an absolute directory).
-  virtual std::string GetDefaultHostJavabase() const;
+  // Returns the absolute path to the user's local JDK install, to be used as
+  // the default target javabase and as a fall-back host_javabase. This is not
+  // the embedded JDK.
+  virtual std::string GetSystemJavabase() const;
 
   // Returns the path to the JVM. This should be called after parsing
   // the startup options.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
index 02d7a2f..c2e9721 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BlazeDirectories.java
@@ -52,6 +52,11 @@
   private final ServerDirectories serverDirectories;
   /** Workspace root and server CWD. */
   private final Path workspace;
+  /**
+   * The root of the user's local JDK install, to be used as the default target javabase and as a
+   * fall-back host_javabase. This is not the embedded JDK.
+   */
+  private final Path defaultSystemJavabase;
   /** The root of all build actions. */
   private final Path execRoot;
 
@@ -62,9 +67,14 @@
   private final String productName;
 
   @AutoCodec.Instantiator
-  public BlazeDirectories(ServerDirectories serverDirectories, Path workspace, String productName) {
+  public BlazeDirectories(
+      ServerDirectories serverDirectories,
+      Path workspace,
+      Path defaultSystemJavabase,
+      String productName) {
     this.serverDirectories = serverDirectories;
     this.workspace = workspace;
+    this.defaultSystemJavabase = defaultSystemJavabase;
     this.productName = productName;
     Path outputBase = serverDirectories.getOutputBase();
     Path execRootBase = outputBase.getChild("execroot");
@@ -99,6 +109,11 @@
     return workspace;
   }
 
+  /** Returns the root of the user's local JDK install (not the embedded JDK). */
+  public Path getLocalJavabase() {
+    return defaultSystemJavabase;
+  }
+
   /** Returns if the workspace directory is a valid workspace. */
   public boolean inWorkspace() {
     return this.workspace != null;
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE
index 7963114..631fdfd 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE
@@ -2,6 +2,12 @@
 
 new_local_repository(
     name = "local_jdk",
+    path = DEFAULT_SYSTEM_JAVABASE,
+    build_file = __embedded_dir__ + "/jdk.BUILD",
+)
+
+new_local_repository(
+    name = "embedded_jdk",
     path = DEFAULT_SERVER_JAVABASE,
     build_file = __embedded_dir__ + "/jdk.BUILD",
 )
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index 7335874..12eaad3 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -71,12 +71,14 @@
           "__embedded_dir__", // serializable so optional
           "__workspace_dir__", // serializable so optional
           "DEFAULT_SERVER_JAVABASE", // serializable so optional
+          "DEFAULT_SYSTEM_JAVABASE", // serializable so optional
           PackageFactory.PKG_CONTEXT);
 
   private final Package.Builder builder;
 
   private final Path installDir;
   private final Path workspaceDir;
+  private final Path defaultSystemJavabaseDir;
   private final Mutability mutability;
 
   private final boolean allowOverride;
@@ -107,7 +109,7 @@
       RuleClassProvider ruleClassProvider,
       ImmutableList<EnvironmentExtension> environmentExtensions,
       Mutability mutability) {
-    this(builder, ruleClassProvider, environmentExtensions, mutability, true, null, null);
+    this(builder, ruleClassProvider, environmentExtensions, mutability, true, null, null, null);
   }
 
   // TODO(bazel-team): document installDir
@@ -118,6 +120,7 @@
    * @param mutability the Mutability for the current evaluation context
    * @param installDir the install directory
    * @param workspaceDir the workspace directory
+   * @param defaultSystemJavabaseDir the local JDK directory
    */
   public WorkspaceFactory(
       Package.Builder builder,
@@ -126,11 +129,13 @@
       Mutability mutability,
       boolean allowOverride,
       @Nullable Path installDir,
-      @Nullable Path workspaceDir) {
+      @Nullable Path workspaceDir,
+      @Nullable Path defaultSystemJavabaseDir) {
     this.builder = builder;
     this.mutability = mutability;
     this.installDir = installDir;
     this.workspaceDir = workspaceDir;
+    this.defaultSystemJavabaseDir = defaultSystemJavabaseDir;
     this.allowOverride = allowOverride;
     this.environmentExtensions = environmentExtensions;
     this.ruleFactory = new RuleFactory(ruleClassProvider, AttributeContainer::new);
@@ -534,6 +539,14 @@
         javaHome = javaHome.getParentFile();
       }
       workspaceEnv.update("DEFAULT_SERVER_JAVABASE", javaHome.toString());
+      if (defaultSystemJavabaseDir != null && defaultSystemJavabaseDir.toString().isEmpty()) {
+        throw new AssertionError(defaultSystemJavabaseDir);
+      }
+      workspaceEnv.update(
+          "DEFAULT_SYSTEM_JAVABASE",
+          defaultSystemJavabaseDir != null
+              ? defaultSystemJavabaseDir.toString()
+              : javaHome.toString());
 
       for (EnvironmentExtension extension : environmentExtensions) {
         extension.updateWorkspace(workspaceEnv);
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 064f020..cdad1e5 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -1016,6 +1016,7 @@
     String productName = startupOptions.productName.toLowerCase(Locale.US);
 
     PathFragment workspaceDirectory = startupOptions.workspaceDirectory;
+    PathFragment defaultSystemJavabase = startupOptions.defaultSystemJavabase;
     PathFragment outputUserRoot = startupOptions.outputUserRoot;
     PathFragment installBase = startupOptions.installBase;
     PathFragment outputBase = startupOptions.outputBase;
@@ -1060,6 +1061,10 @@
     if (!workspaceDirectory.equals(PathFragment.EMPTY_FRAGMENT)) {
       workspaceDirectoryPath = fs.getPath(workspaceDirectory);
     }
+    Path defaultSystemJavabasePath = null;
+    if (!defaultSystemJavabase.equals(PathFragment.EMPTY_FRAGMENT)) {
+      defaultSystemJavabasePath = fs.getPath(defaultSystemJavabase);
+    }
 
     ServerDirectories serverDirectories =
         new ServerDirectories(
@@ -1097,7 +1102,8 @@
     BlazeRuntime runtime = runtimeBuilder.build();
 
     BlazeDirectories directories =
-        new BlazeDirectories(serverDirectories, workspaceDirectoryPath, productName);
+        new BlazeDirectories(
+            serverDirectories, workspaceDirectoryPath, defaultSystemJavabasePath, productName);
     BinTools binTools;
     try {
       binTools = BinTools.forProduction(directories);
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java
index e5a8069..a5b81be 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java
@@ -177,6 +177,18 @@
   public PathFragment workspaceDirectory;
 
   @Option(
+      name = "default_system_javabase",
+      defaultValue = "", // NOTE: only for documentation, value is always passed by the client.
+      documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+      effectTags = {OptionEffectTag.CHANGES_INPUTS, OptionEffectTag.LOSES_INCREMENTAL_STATE},
+      metadataTags = {OptionMetadataTag.HIDDEN},
+      converter = OptionsUtils.PathFragmentConverter.class,
+      help =
+          "The root of the user's local JDK install, to be used as the default target javabase"
+              + " and as a fall-back host_javabase. This is not the embedded JDK.")
+  public PathFragment defaultSystemJavabase;
+
+  @Option(
     name = "max_idle_secs",
     // NOTE: default value only used for documentation, value is always passed by the client when
     // not in --batch mode.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
index 945ecfe..a82a9a7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -99,7 +99,8 @@
               mutability,
               key.getIndex() == 0,
               directories.getEmbeddedBinariesRoot(),
-              directories.getWorkspace());
+              directories.getWorkspace(),
+              directories.getLocalJavabase());
       if (key.getIndex() > 0) {
         WorkspaceFileValue prevValue = (WorkspaceFileValue) env.getValue(
             WorkspaceFileValue.key(key.getPath(), key.getIndex() - 1));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
index d718304..7ca43d0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -147,7 +147,10 @@
       Path devNull = workspaceDir.getFileSystem().getPath("/dev/null");
       directories =
           new BlazeDirectories(
-              new ServerDirectories(installBase, outputBase, devNull), workspaceDir, "blaze");
+              new ServerDirectories(installBase, outputBase, devNull),
+              workspaceDir,
+              /* defaultSystemJavabase= */ null,
+              "blaze");
 
       this.pkgLocator =
           new PathPackageLocator(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/FakeDirectories.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/FakeDirectories.java
index dfece60..8d67d99 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/FakeDirectories.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/FakeDirectories.java
@@ -30,7 +30,10 @@
 
   public static final BlazeDirectories BLAZE_DIRECTORIES =
       new BlazeDirectories(
-          SERVER_DIRECTORIES, OUTPUT_BASE.getRelative("execroot/io_bazel"), "bazel");
+          SERVER_DIRECTORIES,
+          OUTPUT_BASE.getRelative("execroot/io_bazel"),
+          /* defaultSystemJavabase= */ null,
+          "bazel");
 
   private FakeDirectories() {}
 }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java
index 36024e5..bc89c9a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BlazeDirectoriesTest.java
@@ -37,20 +37,29 @@
     Path workspace = fs.getPath("/my/ws");
     BlazeDirectories directories =
         new BlazeDirectories(
-            new ServerDirectories(installBase, outputBase, userRoot), workspace, "foo");
+            new ServerDirectories(installBase, outputBase, userRoot),
+            workspace,
+            /* defaultSystemJavabase= */ null,
+            "foo");
     assertThat(outputBase.getRelative("execroot/ws")).isEqualTo(directories.getExecRoot());
 
     workspace = null;
     directories =
         new BlazeDirectories(
-            new ServerDirectories(installBase, outputBase, userRoot), workspace, "foo");
+            new ServerDirectories(installBase, outputBase, userRoot),
+            workspace,
+            /* defaultSystemJavabase= */ null,
+            "foo");
     assertThat(outputBase.getRelative("execroot/" + BlazeDirectories.DEFAULT_EXEC_ROOT))
         .isEqualTo(directories.getExecRoot());
 
     workspace = fs.getPath("/");
     directories =
         new BlazeDirectories(
-            new ServerDirectories(installBase, outputBase, userRoot), workspace, "foo");
+            new ServerDirectories(installBase, outputBase, userRoot),
+            workspace,
+            /* defaultSystemJavabase= */ null,
+            "foo");
     assertThat(outputBase.getRelative("execroot/" + BlazeDirectories.DEFAULT_EXEC_ROOT))
         .isEqualTo(directories.getExecRoot());
   }
@@ -64,6 +73,7 @@
                     FsUtils.TEST_FILESYSTEM.getPath("/output_base"),
                     FsUtils.TEST_FILESYSTEM.getPath("/user_root")),
                 FsUtils.TEST_FILESYSTEM.getPath("/workspace"),
+                /* defaultSystemJavabase= */ null,
                 "Blaze"),
             new BlazeDirectories(
                 new ServerDirectories(
@@ -72,6 +82,7 @@
                     FsUtils.TEST_FILESYSTEM.getPath("/user_root"),
                     "1234abcd1234abcd1234abcd1234abcd"),
                 FsUtils.TEST_FILESYSTEM.getPath("/workspace"),
+                /* defaultSystemJavabase= */ null,
                 "Blaze"),
             new BlazeDirectories(
                 new ServerDirectories(
@@ -79,6 +90,7 @@
                     FsUtils.TEST_FILESYSTEM.getPath("/output_base"),
                     FsUtils.TEST_FILESYSTEM.getPath("/user_root")),
                 FsUtils.TEST_FILESYSTEM.getPath("/workspace"),
+                /* defaultSystemJavabase= */ null,
                 "Bazel"))
         .addDependency(FileSystem.class, FsUtils.TEST_FILESYSTEM)
         .runTests();
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java
index 81dc77b..40b7c04 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/TemplateExpansionActionTest.java
@@ -77,6 +77,7 @@
                 scratch.resolve("/base"),
                 scratch.resolve("/userRoot")),
             scratch.resolve("/workspace"),
+            /* defaultSystemJavabase= */ null,
             "mock-product-name");
     binTools = BinTools.empty(directories);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
index 346569c..1880c29 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
@@ -157,6 +157,7 @@
         new BlazeDirectories(
             new ServerDirectories(outputBase, outputBase, outputBase),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             analysisMock.getProductName());
     workspaceStatusActionFactory =
         new AnalysisTestUtil.DummyWorkspaceStatusActionFactory(directories);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index b917b32..6cb707f 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -221,6 +221,7 @@
         new BlazeDirectories(
             new ServerDirectories(outputBase, outputBase, outputBase),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             analysisMock.getProductName());
     actionKeyContext = new ActionKeyContext();
     mockToolsConfig = new MockToolsConfig(rootDirectory, false);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
index e1c054d..1c314f4 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
@@ -107,6 +107,7 @@
         new BlazeDirectories(
             new ServerDirectories(outputBase, outputBase, outputBase),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             analysisMock.getProductName());
     pkgFactory =
         analysisMock
diff --git a/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
index ec724b2..1dcd3b0 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/BlazeExecutorTest.java
@@ -55,6 +55,7 @@
                 fileSystem.getPath("/base"),
                 fileSystem.getPath("/root")),
             fileSystem.getPath("/workspace"),
+            /* defaultSystemJavabase= */ null,
             "mock-product-name");
     binTools = BinTools.empty(directories);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
index 712695e..60d6df6 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
@@ -65,7 +65,8 @@
             Mutability.create("test"),
             allowOverride,
             root,
-            root);
+            root,
+            /* defaultSystemJavabaseDir= */ null);
     Exception exception = null;
     try {
       byte[] bytes =
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
index 5503935..58107d0 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
@@ -95,6 +95,7 @@
         new BlazeDirectories(
             new ServerDirectories(outputBase, outputBase, outputBase),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             loadingMock.getProductName());
     packageFactory =
         loadingMock
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
index b199ffa..2890619 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
@@ -78,6 +78,7 @@
         new BlazeDirectories(
             new ServerDirectories(outputBase, outputBase, outputBase),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             analysisMock.getProductName());
     skyframeExecutor =
         SequencedSkyframeExecutor.create(
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
index 81da772..32aacda 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
@@ -471,6 +471,7 @@
               new ServerDirectories(
                   fs.getPath("/install"), fs.getPath("/output"), fs.getPath("/userRoot")),
               workspace,
+              /* defaultSystemJavabase= */ null,
               loadingMock.getProductName());
       ConfiguredRuleClassProvider ruleClassProvider = loadingMock.createRuleClassProvider();
       skyframeExecutor =
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
index 4e030ac..b4fa688 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java
@@ -720,6 +720,7 @@
               new ServerDirectories(
                   fs.getPath("/install"), fs.getPath("/output"), fs.getPath("/userRoot")),
               workspace,
+              /* defaultSystemJavabase= */ null,
               analysisMock.getProductName());
       FileSystemUtils.deleteTree(workspace.getRelative("base"));
 
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java
index afdab94..e4729d3 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java
@@ -86,6 +86,7 @@
         new BlazeDirectories(
             new ServerDirectories(outputBase, outputBase, outputBase),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             analysisMock.getProductName());
     PackageFactory.BuilderForTesting packageFactoryBuilder =
         analysisMock.getPackageFactoryBuilderForTesting(directories);
diff --git a/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java b/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java
index 7b3cbd5..4655acc 100644
--- a/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java
+++ b/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java
@@ -94,6 +94,7 @@
         new BlazeDirectories(
             new ServerDirectories(rootDirectory, outputBase, rootDirectory),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             analysisMock.getProductName());
     ExternalFilesHelper externalFilesHelper =
         ExternalFilesHelper.createForTesting(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
index d49ddc2..78f2d01 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
@@ -76,7 +76,10 @@
     Path root = scratch.dir("/outputbase");
     BlazeDirectories directories =
         new BlazeDirectories(
-            new ServerDirectories(root, root, root), root, TestConstants.PRODUCT_NAME);
+            new ServerDirectories(root, root, root),
+            root,
+            /* defaultSystemJavabase= */ null,
+            TestConstants.PRODUCT_NAME);
     delegatorFunction =
         new RepositoryDelegatorFunction(
             ImmutableMap.of(), null, new AtomicBoolean(true), ImmutableMap::of, directories);
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java
index 3582a2d..9e1b08a 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java
@@ -168,7 +168,8 @@
             .build();
 
     BlazeDirectories directories =
-        new BlazeDirectories(serverDirectories, scratch.dir("pkg"), productName);
+        new BlazeDirectories(
+            serverDirectories, scratch.dir("pkg"), /* defaultSystemJavabase= */ null, productName);
     this.runtime.initWorkspace(directories, /*binTools=*/null);
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
index d9454bc..33b8acb 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java
@@ -78,7 +78,11 @@
     this.runtime.overrideCommands(ImmutableList.of(new C0Command()));
 
     BlazeDirectories directories =
-        new BlazeDirectories(serverDirectories, scratch.dir("workspace"), productName);
+        new BlazeDirectories(
+            serverDirectories,
+            scratch.dir("workspace"),
+            /* defaultSystemJavabase= */ null,
+            productName);
     runtime.initWorkspace(directories, /*binTools=*/ null);
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
index 3d52a3d..0235a3a 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
@@ -646,6 +646,7 @@
             new BlazeDirectories(
                 new ServerDirectories(outputBase, outputBase, outputBase),
                 rootDirectory,
+                /* defaultSystemJavabase= */ null,
                 "productName"),
             /* fragmentsMap= */ ImmutableMap
                 .<Class<? extends BuildConfiguration.Fragment>, BuildConfiguration.Fragment>of(),
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
index 71948da..80fc134 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
@@ -381,7 +381,11 @@
     snooze = new WaitForCompletionCommand(isTestShuttingDown);
     dispatcher = new BlazeCommandDispatcher(runtime, snooze);
     BlazeDirectories blazeDirectories =
-        new BlazeDirectories(serverDirectories, scratch.dir("workspace"), productName);
+        new BlazeDirectories(
+            serverDirectories,
+            scratch.dir("workspace"),
+            /* defaultSystemJavabase= */ null,
+            productName);
     runtime.initWorkspace(blazeDirectories, /* binTools= */ null);
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java b/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java
index d2235c8..6f6ff5d 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/commands/CleanCommandRecommendsAsyncTest.java
@@ -110,7 +110,11 @@
                 })
             .build();
     BlazeDirectories directories =
-        new BlazeDirectories(serverDirectories, scratch.dir("workspace"), productName);
+        new BlazeDirectories(
+            serverDirectories,
+            scratch.dir("workspace"),
+            /* defaultSystemJavabase= */ null,
+            productName);
     runtime.initWorkspace(directories, /* binTools= */ null);
 
     BlazeCommandDispatcher dispatcher = new BlazeCommandDispatcher(runtime, new CleanCommand(os));
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
index 84b2cd9..c0c2d73 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
@@ -78,7 +78,10 @@
                 BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
     BlazeDirectories directories =
         new BlazeDirectories(
-            new ServerDirectories(root, root, root), root, TestConstants.PRODUCT_NAME);
+            new ServerDirectories(root, root, root),
+            root,
+            /* defaultSystemJavabase= */ null,
+            TestConstants.PRODUCT_NAME);
     ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
         pkgLocator,
         ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS,
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
index 7982b2d..100b086 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
@@ -85,6 +85,7 @@
         new BlazeDirectories(
             new ServerDirectories(rootDirectory, outputBase, outputBase),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             analysisMock.getProductName());
     ExternalFilesHelper externalFilesHelper =
         ExternalFilesHelper.createForTesting(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
index 3ddda58..926d63b 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
@@ -131,6 +131,7 @@
         new BlazeDirectories(
             new ServerDirectories(pkgRoot.asPath(), outputBase, outputBase),
             pkgRoot.asPath(),
+            /* defaultSystemJavabase= */ null,
             TestConstants.PRODUCT_NAME);
     ExternalFilesHelper externalFilesHelper =
         ExternalFilesHelper.createForTesting(pkgLocatorRef, externalFileAction, directories);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
index bd1a1a0..02088a9 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
@@ -96,6 +96,7 @@
             new BlazeDirectories(
                 new ServerDirectories(outputBase, outputBase, outputBase),
                 rootDirectory,
+                /* defaultSystemJavabase= */ null,
                 TestConstants.PRODUCT_NAME));
 
     Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>();
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
index 2616923..f0112d4 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
@@ -111,7 +111,10 @@
                 BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
     BlazeDirectories directories =
         new BlazeDirectories(
-            new ServerDirectories(pkgRoot, pkgRoot, pkgRoot), pkgRoot, TestConstants.PRODUCT_NAME);
+            new ServerDirectories(pkgRoot, pkgRoot, pkgRoot),
+            pkgRoot,
+            /* defaultSystemJavabase= */ null,
+            TestConstants.PRODUCT_NAME);
     ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
         pkgLocator, ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, directories);
     skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
index f690e65..167672a 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
@@ -133,7 +133,10 @@
         new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
     BlazeDirectories directories =
         new BlazeDirectories(
-            new ServerDirectories(root, root, root), root, TestConstants.PRODUCT_NAME);
+            new ServerDirectories(root, root, root),
+            root,
+            /* defaultSystemJavabase= */ null,
+            TestConstants.PRODUCT_NAME);
     ExternalFilesHelper externalFilesHelper =
         ExternalFilesHelper.createForTesting(
             pkgLocator,
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
index be292bd..3e457ba 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
@@ -77,6 +77,7 @@
         new BlazeDirectories(
             new ServerDirectories(rootDirectory, outputBase, rootDirectory),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             analysisMock.getProductName());
     ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
         pkgLocator, ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, directories);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
index 978da79..195d987 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
@@ -102,6 +102,7 @@
         new BlazeDirectories(
             new ServerDirectories(rootDirectory, outputBase, rootDirectory),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             analysisMock.getProductName());
     ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
         pkgLocator, ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, directories);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
index b307d09..85decff 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java
@@ -74,6 +74,7 @@
                 getScratch().dir("/output"),
                 getScratch().dir("/user_root")),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             AnalysisMock.get().getProductName());
     ConfiguredRuleClassProvider ruleClassProvider = AnalysisMock.get().createRuleClassProvider();
     skyframeExecutor =
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
index 8ea4fd0..7dc9f95 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
@@ -105,6 +105,7 @@
         new BlazeDirectories(
             new ServerDirectories(rootDirectory, outputBase, rootDirectory),
             rootDirectory,
+            null,
             analysisMock.getProductName());
     ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
         pkgLocator, ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, directories);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
index e80ec31..56ada85 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
@@ -175,6 +175,7 @@
         new BlazeDirectories(
             new ServerDirectories(rootDirectory, outputBase, outputBase),
             rootDirectory,
+            /* defaultSystemJavabase= */ null,
             TestConstants.PRODUCT_NAME);
     ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
         pkgLocator,
diff --git a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
index 5ef553f..d4ecd6c 100644
--- a/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategyTest.java
@@ -112,6 +112,7 @@
         new BlazeDirectories(
             new ServerDirectories(outputBase, outputBase, outputBase),
             workspaceDir,
+            /* defaultSystemJavabase= */ null,
             "mock-product-name");
     // This call implicitly symlinks the integration bin tools into the exec root.
     IntegrationMock.get()
diff --git a/src/test/shell/bazel/bazel_rules_test.sh b/src/test/shell/bazel/bazel_rules_test.sh
index b7e204f..2f2cc73 100755
--- a/src/test/shell/bazel/bazel_rules_test.sh
+++ b/src/test/shell/bazel/bazel_rules_test.sh
@@ -323,7 +323,7 @@
 genrule(
     name = "toolchain_check",
     outs = ["version"],
-    toolchains = ['@bazel_tools//tools/jdk:current_java_runtime'],
+    toolchains = ['@bazel_tools//tools/jdk:current_host_java_runtime'],
     cmd = "ls -al \$(JAVABASE) > \$@",
 )
 EOF
diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD
index 87e654f..92cf7dd 100644
--- a/tools/jdk/BUILD
+++ b/tools/jdk/BUILD
@@ -185,7 +185,7 @@
 
 alias(
     name = "host_jdk",
-    actual = "@local_jdk//:jdk",
+    actual = "@embedded_jdk//:jdk",
 )
 
 genrule(