Separate java_tools into platform independent and prebuilt part.

java_tools is repository package containing tools needed during Java compilation: JavaBuilder, patches for Java compiler, ijar, singlejar, ...
Most of the files are jars with Java classes. java_tools are released for three platforms: linux, windows and darwin, however the only difference is in two binaries: ijar and singlejar.

This is part one of splitting java_tools and releasing split version (following PR makes use of released split version in Bazel)

Java_tools used to be released for multiple Java versions, but all the releases were the same except a some string substitutions in BUILD file. I changed to build only a single version, since it already supports Java from 8 to 14.

Changes:
- BUILD.java_tools is split into BUILD.java_tools_prebuilt (where the second contains prebuilt binaries)
- toolchain definitions are removed from BUILD.java_tools and will be added to tools/jdk/BUILD in the second part
- java_toolchain_default.bzl.java_tools is removed (default_java_toolchain.bzl will be updated with its features in the second part).
- src/BUILD: JAVA_VERSION is removed, targets used to build java_tools.zip are duplicated to build java_tools_prebuilt.zip (done some cleanup as well)
- upload_all_java_tools.sh and upload_java_tools.sh: used by Build kite, I removed java_version over the release, but kept it over tests (for different JDKs)
- create_java_tools_release.sh: used by the user in the release process - added platform independent part
- tests are updated to use platform independent and platform files, some tests had to be disabled and will be reenabled after the release

Closes #12546.

PiperOrigin-RevId: 344319092
diff --git a/src/BUILD b/src/BUILD
index f00e228..b39dc0d 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -552,6 +552,39 @@
     visibility = ["//visibility:public"],
 )
 
+# The java_tools release process produces following zip files:
+#  - java_tools_dist.zip: all sources (Java and C++)
+#  - java_tools.zip: platform independent part - Java classes (deploy jars) and C++ sources
+#  - java_tools_prebuilt.zip: C++ binaries (for platforms: Linux, Darwin and Windows)
+#
+# The files are then used in Bazel as @remote_java_tools and @remote_java_tools_{platform}
+# repositories.
+# The zip files are not embedded or used in Bazel.
+
+# Following target build java_tools_dist.zip - the sources
+genrule(
+    name = "java_tools_dist",
+    srcs = [
+        "//src/java_tools/buildjar:srcs",
+        "//src/java_tools/junitrunner:srcs",
+        "//src/java_tools/singlejar:srcs",
+        "//src/tools/singlejar:embedded_java_tools",
+        "//third_party/checker_framework_dataflow:srcs",
+        "//third_party/checker_framework_javacutil:srcs",
+        "//third_party/ijar:transitive_sources",
+        "//third_party/java/jacoco:transitive_sources",
+        "//third_party/java/proguard:srcs",
+        "@java_tools_langtools_javac11//:srcs",
+    ],
+    outs = ["java_tools_dist.zip"],
+    cmd = "zip -qXr $@ $$(echo $(SRCS) | sort)",
+    output_to_bindir = 1,
+    visibility = ["//src/test/shell/bazel:__pkg__"],
+)
+
+# Following targets build java_tools.zip - platform independent part of java_tools
+# It is painstainkingly built by renaming single files, zipping them and merging zips together
+# TODO(bazel-team): Replace this with a single target, for example "release_archive" in rules_kotlin
 JAVA_TOOLS_DEPLOY_JARS = [
     "//src/java_tools/buildjar:JavaBuilder_deploy.jar",
     "//src/java_tools/buildjar:VanillaJavaBuilder_deploy.jar",
@@ -559,174 +592,139 @@
     "//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:turbine_direct_binary_deploy.jar",
     "//src/java_tools/junitrunner/java/com/google/testing/coverage:JacocoCoverage_jarjar_deploy.jar",
     "//src/java_tools/junitrunner/java/com/google/testing/junit/runner:Runner_deploy.jar",
-] + select({
-    "//src/conditions:arm": ["//src/java_tools/singlejar/java/com/google/devtools/build/singlejar:bazel-singlejar_deploy.jar"],
-    "//conditions:default": [],
-})
-
-JAVA_VERSIONS = ("11",)
-
-[
-    genrule(
-        name = "jars_java_tools_java" + java_version + "_zip",
-        srcs = JAVA_TOOLS_DEPLOY_JARS + [
-            "@java_tools_langtools_javac11//:jdk_compiler_jar",
-            "@java_tools_langtools_javac11//:java_compiler_jar",
-            "@java_tools_langtools_javac11//:javac_jar",
-        ],
-        outs = ["jars_java_tools_java" + java_version + ".zip"],
-        cmd = "zip -qjX $@ $$(echo $(SRCS) | sort)",
-        visibility = ["//visibility:private"],
-    )
-    for java_version in JAVA_VERSIONS
+    "//src/java_tools/singlejar/java/com/google/devtools/build/singlejar:bazel-singlejar_deploy.jar",
 ]
 
-[
-    genrule(
-        name = "java_tools_dist_java" + java_version,
-        srcs = [
-            "//src/java_tools/buildjar:srcs",
-            "//src/java_tools/junitrunner:srcs",
-            "//src/java_tools/singlejar:srcs",
-            "//src/tools/singlejar:embedded_java_tools",
-            "//third_party/checker_framework_dataflow:srcs",
-            "//third_party/checker_framework_javacutil:srcs",
-            "//third_party/ijar:transitive_sources",
-            "//third_party/java/jacoco:transitive_sources",
-            "//third_party/java/proguard:srcs",
-            "@java_tools_langtools_javac11//:srcs",
-        ],
-        outs = ["java_tools_dist_javac" + java_version + ".zip"],
-        cmd = "zip -qXr $@ $$(echo $(SRCS) | sort)",
-        output_to_bindir = 1,
-        visibility = ["//src/test/shell/bazel:__pkg__"],
-    )
-    for java_version in JAVA_VERSIONS
-]
+genrule(
+    name = "jars_java_tools_zip",
+    srcs = JAVA_TOOLS_DEPLOY_JARS + [
+        "@java_tools_langtools_javac11//:jdk_compiler_jar",
+        "@java_tools_langtools_javac11//:java_compiler_jar",
+        "@java_tools_langtools_javac11//:javac_jar",
+    ],
+    outs = ["jars_java_tools.zip"],
+    cmd = "zip -qjX $@ $$(echo $(SRCS) | sort)",
+    visibility = ["//visibility:private"],
+)
 
-[
-    # Targets used by the java_tools_binaries Buildkite pipeline to build the
-    # java_tools_dist_java* zips and upload them to a tmp directory in GCS.
-    sh_binary(
-        name = "upload_java_tools_dist_java" + java_version,
-        srcs = ["upload_java_tools.sh"],
-        args = [
-            "--java_tools_zip",
-            "src/java_tools_dist_javac" + java_version + ".zip",
-            "--gcs_java_tools_dir",
-            "tmp/sources",
-            "--java_version",
-            java_version,
-            "--platform",
-        ] + select({
-            "//src/conditions:darwin": ["darwin"],
-            "//src/conditions:windows": ["windows"],
-            "//src/conditions:linux": ["linux"],
-            "//conditions:default": ["unknown"],
-        }),
-        data = [":java_tools_dist_java" + java_version],
-        deps = ["@bazel_tools//tools/bash/runfiles"],
-    )
-    for java_version in JAVA_VERSIONS
-]
+genrule(
+    name = "java_tools_build_zip",
+    srcs = ["//tools/jdk:BUILD.java_tools"],
+    outs = ["java_tools_build.zip"],
+    cmd = "cat $(SRCS) > BUILD; zip -qjX $@ BUILD",
+)
 
-[
-    # The java_tools releases can have BUILD files that vary depending on the
-    # javac version they embed. Currently the only difference is in the
-    # java_toolchain source version which has to be 14 for javac 14 to be able
-    # to build new Java 14 features. This is not used atm, as the toolchain for
-    # javac 14 was duplicated, but it might be used in future Bazel releases to
-    # support new javac release, so that we preserve this step for now.
-    [
-        genrule(
-            name = "create_java_tools_build_java" + java_version,
-            srcs = ["//tools/jdk:BUILD.java_tools"],
-            outs = ["remote_java_tools_java" + java_version + "/BUILD"],
-            cmd = "sed 's/JAVA_LANGUAGE_LEVEL/" + java_version + "/g' $< > $@",
-        ),
-        genrule(
-            name = "create_java_tools_default_java" + java_version,
-            srcs = ["//tools/jdk:java_toolchain_default.bzl.java_tools"],
-            outs = ["remote_java_tools_java" + java_version + "/java_toolchain_default.bzl"],
-            cmd = "cp $< $@",
-        ),
-    ]
-    for java_version in JAVA_VERSIONS
-]
+genrule(
+    name = "java_tools_no_build_zip",
+    srcs = [
+        ":jars_java_tools.zip",
+        "//src/tools/singlejar:singlejar_transitive_zip",
+        "//third_party/ijar:ijar_transitive_srcs_zip",
+        "//third_party/java/jacoco:jacoco_jars_zip",
+        "//third_party/java/proguard:proguard_zip",
+    ],
+    outs = ["java_tools_no_build.zip"],
+    cmd = "$(location //src:merge_zip_files) java_tools $@ $(SRCS)",
+    output_to_bindir = 1,
+    tools = ["//src:merge_zip_files"],
+    visibility = ["//src/test/shell/bazel:__pkg__"],
+)
 
-[
-    genrule(
-        name = "java_tools_java" + java_version + "_build_zip",
-        srcs = [
-            "remote_java_tools_java" + java_version + "/BUILD",
-            "remote_java_tools_java" + java_version + "/java_toolchain_default.bzl",
-        ],
-        outs = ["java_tools_java_" + java_version + "_build.zip"],
-        cmd = "zip -qjX $@ $(SRCS)",
-    )
-    for java_version in JAVA_VERSIONS
-]
+genrule(
+    name = "java_tools_zip",
+    srcs = [
+        "java_tools_no_build.zip",
+        "java_tools_build.zip",
+    ],
+    outs = ["java_tools.zip"],
+    cmd = "$(location //src:merge_zip_files) - $@ $(SRCS)",
+    output_to_bindir = 1,
+    tools = ["//src:merge_zip_files"],
+    visibility = ["//src/test/shell/bazel:__pkg__"],
+)
 
-# Builds the remote Java tools archive. Not embedded or used in Bazel, but used
-# by the Java tools release process.
-[
-    genrule(
-        name = "java_tools_java" + java_version + "_no_build_zip",
-        srcs = [
-            ":jars_java_tools_java" + java_version + ".zip",
-            "//src/tools/singlejar:singlejar_transitive_zip",
-            "//third_party/ijar:ijar_transitive_zip",
-            "//third_party/java/jacoco:jacoco_jars_zip",
-            "//third_party/java/proguard:proguard_zip",
-        ],
-        outs = ["java_tools_java" + java_version + "_no_build.zip"],
-        cmd = "$(location //src:merge_zip_files) java_tools $@ $(SRCS)",
-        output_to_bindir = 1,
-        tools = ["//src:merge_zip_files"],
-        visibility = ["//src/test/shell/bazel:__pkg__"],
-    )
-    for java_version in JAVA_VERSIONS
-]
+# Following targets build java_tools_prebuilt.zip part of java_tools
+# It is painstainkingly built by renaming single files, zipping them and merging zips together
+# TODO(bazel-team): Replace this with a single target, for example "release_archive" in rules_kotlin
+genrule(
+    name = "java_tools_prebuilt_build_zip",
+    srcs = ["//tools/jdk:BUILD.java_tools_prebuilt"],
+    outs = ["java_tools_prebuilt_build.zip"],
+    cmd = "cat $(SRCS) > BUILD; zip -qjX $@ BUILD",
+)
 
-[
-    genrule(
-        name = "java_tools_java" + java_version + "_zip",
-        srcs = [
-            "java_tools_java" + java_version + "_no_build.zip",
-            "java_tools_java_" + java_version + "_build.zip",
-        ],
-        outs = ["java_tools_java" + java_version + ".zip"],
-        cmd = "$(location //src:merge_zip_files) - $@ $(SRCS)",
-        output_to_bindir = 1,
-        tools = ["//src:merge_zip_files"],
-        visibility = ["//src/test/shell/bazel:__pkg__"],
-    )
-    for java_version in JAVA_VERSIONS
-]
+genrule(
+    name = "java_tools_prebuilt_no_build_zip",
+    srcs = [
+        "//src/tools/singlejar:singlejar_deploy_zip",
+        "//third_party/ijar:ijar_deploy_zip",
+    ],
+    outs = ["java_tools_prebuilt_no_build.zip"],
+    cmd = "$(location //src:merge_zip_files) java_tools $@ $(SRCS)",
+    output_to_bindir = True,
+    tools = ["//src:merge_zip_files"],
+    visibility = ["//src/test/shell/bazel:__pkg__"],
+)
 
-[
-    # Targets used by the java_tools_binaries Buildkite pipeline to build the
-    # java_tools_java* zips and upload them to a tmp directory in GCS.
-    sh_binary(
-        name = "upload_java_tools_java" + java_version,
-        srcs = ["upload_java_tools.sh"],
-        args = [
-            "--gcs_java_tools_dir",
-            "tmp/build",
-            "--java_version",
-            java_version,
-            "--platform",
-        ] + select({
-            "//src/conditions:darwin": ["darwin"],
-            "//src/conditions:windows": ["windows"],
-            "//src/conditions:linux": ["linux"],
-            "//conditions:default": ["unknown"],
-        }),
-        data = [":java_tools_java" + java_version + "_zip"],
-        deps = ["@bazel_tools//tools/bash/runfiles"],
-    )
-    for java_version in JAVA_VERSIONS
-]
+genrule(
+    name = "java_tools_prebuilt_zip",
+    srcs = [
+        "java_tools_prebuilt_no_build.zip",
+        "java_tools_prebuilt_build.zip",
+    ],
+    outs = ["java_tools_prebuilt.zip"],
+    cmd = "$(location //src:merge_zip_files) - $@ $(SRCS)",
+    output_to_bindir = 1,
+    tools = ["//src:merge_zip_files"],
+    visibility = ["//src/test/shell/bazel:__pkg__"],
+)
+
+# Following targets used by the java_tools_binaries Buildkite pipeline to upload
+# the java_tools_*.zip to either tmp/sources or tmp/build directories in GCS.
+sh_binary(
+    name = "upload_java_tools_dist",
+    srcs = ["upload_java_tools.sh"],
+    args = [
+        "--java_tools_zip",
+        "src/java_tools_dist.zip",
+        "--gcs_java_tools_dir",
+        "tmp/sources",
+    ],
+    data = [":java_tools_dist"],
+    deps = ["@bazel_tools//tools/bash/runfiles"],
+)
+
+sh_binary(
+    name = "upload_java_tools",
+    srcs = ["upload_java_tools.sh"],
+    args = [
+        "--java_tools_zip",
+        "src/java_tools.zip",
+        "--gcs_java_tools_dir",
+        "tmp/build",
+    ],
+    data = [":java_tools_zip"],
+    deps = ["@bazel_tools//tools/bash/runfiles"],
+)
+
+sh_binary(
+    name = "upload_java_tools_prebuilt",
+    srcs = ["upload_java_tools.sh"],
+    args = [
+        "--java_tools_zip",
+        "src/java_tools_prebuilt.zip",
+        "--gcs_java_tools_dir",
+        "tmp/build",
+        "--platform",
+    ] + select({
+        "//src/conditions:darwin": ["darwin"],
+        "//src/conditions:windows": ["windows"],
+        "//src/conditions:linux": ["linux"],
+        "//conditions:default": ["unknown"],
+    }),
+    data = [":java_tools_prebuilt_zip"],
+    deps = ["@bazel_tools//tools/bash/runfiles"],
+)
 
 # Part of the Java tools remote archive. Not embedded or used in Bazel.
 genrule(
diff --git a/src/create_java_tools_release.sh b/src/create_java_tools_release.sh
index eb16086..4f3bbb6 100755
--- a/src/create_java_tools_release.sh
+++ b/src/create_java_tools_release.sh
@@ -22,8 +22,6 @@
 # The script is using gsutil to copy artifacts.
 #
 # Mandatory flags:
-# --java_version        The JDK version included in the java_tools to be
-#                       released.
 # --java_tools_version  The version number of the java_tools to be released.
 # --rc                  The release candidate number of current release.
 #                       If --release true then --rc is the number of the rc to
@@ -42,12 +40,12 @@
 # JDK11, that was built at commit_hash 123456:
 #
 # src/create_java_tools_release.sh --commit_hash 123456 \
-#     --java_tools_version 2.1 --java_version 11 --rc 1 --release false
+#     --java_tools_version 2.1 --rc 1 --release false
 #
 # To release the release candidate created above:
 #
 # src/create_java_tools_release.sh \
-#     --java_tools_version 2.1 --java_version 11 --rc 1 --release true
+#     --java_tools_version 2.1 --rc 1 --release true
 
 set -euo pipefail
 
@@ -56,7 +54,6 @@
   arg="$1"; shift
   val="$1"; shift
   case "$arg" in
-    "--java_version") java_version="$val" ;;
     "--java_tools_version") java_tools_version="$val" ;;
     "--commit_hash") commit_hash="$val" ;;
     "--rc") rc="$val" ;;
@@ -72,33 +69,21 @@
 
 gcs_bucket="gs://bazel-mirror/bazel_java_tools"
 
-for platform in linux windows darwin; do
-  rc_url="release_candidates/javac${java_version}/v${java_tools_version}/java_tools_javac${java_version}_${platform}-v${java_tools_version}-rc${rc}.zip"
-  rc_sources_url="release_candidates/javac${java_version}/v${java_tools_version}/sources/java_tools_javac${java_version}_${platform}-v${java_tools_version}-rc${rc}.zip"
+for platform in "linux" "windows" "darwin"; do
+  rc_url="release_candidates/java/v${java_tools_version}/java_tools_${platform}-v${java_tools_version}-rc${rc}.zip"
 
   if [[ $release == "true" ]]; then
-    release_artifact="releases/javac${java_version}/v${java_tools_version}/java_tools_javac${java_version}_${platform}-v${java_tools_version}.zip"
-    release_sources_artifact="releases/javac${java_version}/v${java_tools_version}/sources/java_tools_javac${java_version}_${platform}-v${java_tools_version}.zip"
+    release_artifact="releases/java/v${java_tools_version}/java_tools_${platform}-v${java_tools_version}.zip"
     # Make release candidate the release artifact for the current platform.
     # Don't overwrite existing file.
     gsutil -q cp -n "${gcs_bucket}/${rc_url}" "${gcs_bucket}/${release_artifact}"
-
-    # Copy the associated zip file that contains the sources of the release zip.
-    # Don't overwrite existing file.
-    gsutil -q cp -n "${gcs_bucket}/${rc_sources_url}" "${gcs_bucket}/${release_sources_artifact}"
   else
-    tmp_url=$(gsutil ls -lh ${gcs_bucket}/tmp/build/${commit_hash}/java${java_version}/java_tools_javac${java_version}_${platform}* | sort -k 2 | grep gs -m 1 | awk '{print $4}')
-
+    tmp_url=$(gsutil ls -lh ${gcs_bucket}/tmp/build/${commit_hash}/java/java_tools_${platform}* | sort -k 2 | grep gs -m 1 | awk '{print $4}')
 
     # Make the generated artifact a release candidate for the current platform.
     # Don't overwrite existing file.
     gsutil -q cp -n ${tmp_url} "${gcs_bucket}/${rc_url}"
     release_artifact="${rc_url}"
-
-    # Copy the associated zip file that contains the sources of the release zip.
-    # Don't overwrite existing file.
-    tmp_sources_url=$(gsutil ls -lh ${gcs_bucket}/tmp/sources/${commit_hash}/java${java_version}/java_tools_javac${java_version}_${platform}* | sort -k 2 | grep gs -m 1 | awk '{print $4}')
-    gsutil -q cp -n ${tmp_sources_url} ${gcs_bucket}/${rc_sources_url}
   fi
 
   # Download the file locally to compute its sha256sum (needed to update the
@@ -109,3 +94,37 @@
   file_hash=$(sha256sum ${local_zip} | cut -d' ' -f1)
   echo "${release_artifact} ${file_hash}"
 done
+
+rc_url="release_candidates/java/v${java_tools_version}/java_tools-v${java_tools_version}-rc${rc}.zip"
+rc_sources_url="release_candidates/java/v${java_tools_version}/sources/java_tools-v${java_tools_version}-rc${rc}.zip"
+
+if [[ $release == "true" ]]; then
+  release_artifact="releases/java/v${java_tools_version}/java_tools-v${java_tools_version}.zip"
+  release_sources_artifact="releases/java/v${java_tools_version}/sources/java_tools-v${java_tools_version}.zip"
+  # Make release candidate the release artifact for the current platform.
+  # Don't overwrite existing file.
+  gsutil -q cp -n "${gcs_bucket}/${rc_url}" "${gcs_bucket}/${release_artifact}"
+
+  # Copy the associated zip file that contains the sources of the release zip.
+  # Don't overwrite existing file.
+  gsutil -q cp -n "${gcs_bucket}/${rc_sources_url}" "${gcs_bucket}/${release_sources_artifact}"
+else
+  tmp_url=$(gsutil ls -lh ${gcs_bucket}/tmp/build/${commit_hash}/java/java_tools-* | sort -k 2 | grep gs -m 1 | awk '{print $4}')
+
+  gsutil -q cp -n ${tmp_url} "${gcs_bucket}/${rc_url}"
+  release_artifact="${rc_url}"
+
+  # Copy the associated zip file that contains the sources of the release zip.
+  # Don't overwrite existing file.
+  tmp_sources_url=$(gsutil ls -lh ${gcs_bucket}/tmp/sources/${commit_hash}/java/java_tools-* | sort -k 2 | grep gs -m 1 | awk '{print $4}')
+  gsutil -q cp -n ${tmp_sources_url} ${gcs_bucket}/${rc_sources_url}
+fi
+
+# Download the file locally to compute its sha256sum (needed to update the
+# java_tools in Bazel).
+# Don't overwrite existing file.
+local_zip="$tmp_dir/java_tools.zip"
+gsutil -q cp -n ${gcs_bucket}/${rc_url} ${local_zip}
+file_hash=$(sha256sum ${local_zip} | cut -d' ' -f1)
+echo "${release_artifact} ${file_hash}"
+
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD
index 27f69e9..4cfd2e7 100644
--- a/src/test/shell/bazel/BUILD
+++ b/src/test/shell/bazel/BUILD
@@ -183,9 +183,10 @@
     srcs = ["bazel_java14_test.sh"],
     args = [
         # --java_toolchain and --host_java_toolchain values
-        "@local_java_tools//:toolchain_jdk_14",
+        "@bazel_tools//tools/jdk:toolchain_jdk_14",
         # java_tools zip to test
-        "src/java_tools_java11.zip",
+        "src/java_tools.zip",
+        "src/java_tools_prebuilt.zip",
     ] + select({
         # --javabase and --host_javabase values
         "//src/conditions:darwin": ["@openjdk14_darwin_archive//:runtime"],
@@ -194,11 +195,16 @@
     }),
     data = [
         ":test-deps",
-        "//src:java_tools_java11_zip",
+        "//src:java_tools_prebuilt_zip",
+        "//src:java_tools_zip",
         "//src/test/shell/bazel/testdata:jdk_http_archives_filegroup",
         "@bazel_tools//tools/bash/runfiles",
     ],
-    tags = ["local"],
+    # TODO(ilist): reenable after java_tools release
+    tags = [
+        "local",
+        "manual",
+    ],
 )
 
 sh_test(
@@ -206,9 +212,10 @@
     srcs = ["bazel_java15_test.sh"],
     args = [
         # --java_toolchain and --host_java_toolchain values
-        "@local_java_tools//:toolchain_jdk_15",
+        "@bazel_tools//tools/jdk:toolchain_jdk_15",
         # java_tools zip to test
-        "src/java_tools_java11.zip",
+        "src/java_tools.zip",
+        "src/java_tools_prebuilt.zip",
     ] + select({
         # --javabase and --host_javabase values
         "//src/conditions:darwin": ["@openjdk15_darwin_archive//:runtime"],
@@ -217,11 +224,16 @@
     }),
     data = [
         ":test-deps",
-        "//src:java_tools_java11_zip",
+        "//src:java_tools_prebuilt_zip",
+        "//src:java_tools_zip",
         "//src/test/shell/bazel/testdata:jdk_http_archives_filegroup",
         "@bazel_tools//tools/bash/runfiles",
     ],
-    tags = ["local"],
+    # TODO(ilist): reenable after java_tools release
+    tags = [
+        "local",
+        "manual",
+    ],
 )
 
 sh_test(
@@ -233,6 +245,7 @@
     args = [
         "@bazel_tools//tools/jdk:toolchain",
         "released",
+        "released",
     ],
     data = [
         ":test-deps",
@@ -252,9 +265,10 @@
         srcs = ["bazel_java_test.sh"],
         args = [
             # --java_toolchain
-            "@local_java_tools//:toolchain",
-            # java_tools zip to test
-            "src/java_tools_java11.zip",
+            "@bazel_tools//tools/jdk:toolchain",
+            # java_tools zips to test
+            "src/java_tools.zip",
+            "src/java_tools_prebuilt.zip",
             # --javabase value
         ] + select({
             "//src/conditions:darwin": ["@openjdk" + java_version + "_darwin_archive//:runtime"],
@@ -263,11 +277,14 @@
         }),
         data = [
             ":test-deps",
-            "//src:java_tools_java11_zip",
+            "//src:java_tools_prebuilt_zip",
+            "//src:java_tools_zip",
             "//src/test/shell/bazel/testdata:jdk_http_archives_filegroup",
             "@bazel_tools//tools/bash/runfiles",
         ],
         exec_compatible_with = ["//:highcpu_machine"],
+        # TODO(ilist): reenable after java_tools release
+        tags = ["manual"],
     )
     for java_version in JAVA_VERSIONS
 ]
@@ -280,9 +297,10 @@
         srcs = ["bazel_java_test.sh"],
         args = [
             # --java_toolchain
-            "@local_java_tools//:prebuilt_toolchain",
-            # java_tools zip to test
-            "src/java_tools_java11.zip",
+            "@bazel_tools//tools/jdk:prebuilt_toolchain",
+            # java_tools zips to test
+            "src/java_tools.zip",
+            "src/java_tools_prebuilt.zip",
             # --javabase value
         ] + select({
             "//src/conditions:darwin": ["@openjdk" + java_version + "_darwin_archive//:runtime"],
@@ -291,11 +309,14 @@
         }),
         data = [
             ":test-deps",
-            "//src:java_tools_java11_zip",
+            "//src:java_tools_prebuilt_zip",
+            "//src:java_tools_zip",
             "//src/test/shell/bazel/testdata:jdk_http_archives_filegroup",
             "@bazel_tools//tools/bash/runfiles",
         ],
         exec_compatible_with = ["//:highcpu_machine"],
+        # TODO(ilist): reenable after java_tools release
+        tags = ["manual"],
     )
     for java_version in JAVA_VERSIONS
 ]
@@ -308,9 +329,10 @@
         srcs = ["bazel_java_test.sh"],
         args = [
             # --java_toolchain
-            "@local_java_tools//:toolchain",
-            # java_tools zip to test
+            "@bazel_tools//tools/jdk:toolchain",
+            # java_tools zips to test
             "$(LOCAL_JAVA_TOOLS_ZIP_URL)",
+            "$(LOCAL_JAVA_TOOLS_PREBUILT_ZIP_URL)",
             # --javabase value
         ] + select({
             "//src/conditions:darwin": ["@openjdk" + java_version + "_darwin_archive//:runtime"],
@@ -341,25 +363,25 @@
 )
 
 sh_test(
-    name = "bazel_java_tools_javac11_test",
+    name = "bazel_java_tools_test",
     size = "medium",
     srcs = ["bazel_java_tools_test.sh"],
-    args = ["java11"],
     data = [
         ":test-deps",
-        "//src:java_tools_java11.zip",
+        "//src:java_tools.zip",
+        "//src:java_tools_prebuilt.zip",
         "@bazel_tools//tools/bash/runfiles",
     ],
 )
 
 sh_test(
-    name = "bazel_java_tools_dist_javac11_test",
+    name = "bazel_java_tools_dist_test",
     size = "small",
     srcs = ["bazel_java_tools_dist_test.sh"],
     args = ["javac11"],
     data = [
         ":test-deps",
-        "//src:java_tools_dist_javac11.zip",
+        "//src:java_tools_dist.zip",
         "@bazel_tools//tools/bash/runfiles",
     ],
 )
@@ -499,6 +521,7 @@
         "@bazel_tools//tools/jdk:toolchain",
         "released",
         "released",
+        "released",
     ],
     data = [
         ":test-deps",
@@ -514,13 +537,11 @@
     sh_test(
         name = "bazel_coverage_java_jdk" + java_version + "_toolchain_released_test",
         srcs = ["bazel_coverage_java_test.sh"],
-        args = select({
-            "//src/conditions:darwin": ["@remote_java_tools_javac11_test_darwin//:toolchain"],
-            "//src/conditions:windows": ["@remote_java_tools_javac11_test_windows//:toolchain"],
-            "//src/conditions:linux": ["@remote_java_tools_javac11_test_linux//:toolchain"],
-        }) + [
+        args = [
+            "@bazel_tools//tools/jdk:toolchain",
             # java_tools zip to test
             "released",
+            "released",
             # coverage_report_generator to test
             "released",
             # --javabase value
@@ -547,9 +568,10 @@
         srcs = ["bazel_coverage_java_test.sh"],
         args = [
             # --java_toolchain
-            "@local_java_tools//:toolchain",
-            # java_tools zip to test
-            "src/java_tools_java11.zip",
+            "@bazel_tools//tools/jdk:toolchain",
+            # java_tools zips to test
+            "src/java_tools.zip",
+            "src/java_tools_prebuilt.zip",
             # coverage output generator to test
             "tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator/coverage",
             # --javabase value
@@ -560,11 +582,13 @@
         }),
         data = [
             ":test-deps",
-            "//src:java_tools_java11_zip",
+            "//src:java_tools_prebuilt_zip",
+            "//src:java_tools_zip",
             "//src/test/shell/bazel/testdata:jdk_http_archives_filegroup",
             "//tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator:coverage_output_generator_repo",
         ],
         tags = [
+            "manual",  # TODO(ilist): reenable after java_tools release
             "no_windows",
         ],
     )
diff --git a/src/test/shell/bazel/bazel_coverage_java_test.sh b/src/test/shell/bazel/bazel_coverage_java_test.sh
index deafebe..8d16aa8 100755
--- a/src/test/shell/bazel/bazel_coverage_java_test.sh
+++ b/src/test/shell/bazel/bazel_coverage_java_test.sh
@@ -35,6 +35,16 @@
 fi
 JAVA_TOOLS_ZIP_FILE_URL=${JAVA_TOOLS_ZIP_FILE_URL:-}
 
+JAVA_TOOLS_PREBUILT_ZIP="$1"; shift
+if [[ "${JAVA_TOOLS_PREBUILT_ZIP}" != "released" ]]; then
+    if [[ "${JAVA_TOOLS_PREBUILT_ZIP}" == file* ]]; then
+        JAVA_TOOLS_PREBUILT_ZIP_FILE_URL="${JAVA_TOOLS_PREBUILT_ZIP}"
+    else
+        JAVA_TOOLS_PREBUILT_ZIP_FILE_URL="file://$(rlocation io_bazel/$JAVA_TOOLS_PREBUILT_ZIP)"
+    fi
+fi
+JAVA_TOOLS_PREBUILT_ZIP_FILE_URL=${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL:-}
+
 COVERAGE_GENERATOR_DIR="$1"; shift
 if [[ "${COVERAGE_GENERATOR_DIR}" != "released" ]]; then
   COVERAGE_GENERATOR_DIR="$(rlocation io_bazel/$COVERAGE_GENERATOR_DIR)"
@@ -56,9 +66,21 @@
     if [[ ! -z "${JAVA_TOOLS_ZIP_FILE_URL}" ]]; then
     cat >>WORKSPACE <<EOF
 http_archive(
-    name = "local_java_tools",
+    name = "remote_java_tools",
     urls = ["${JAVA_TOOLS_ZIP_FILE_URL}"]
 )
+http_archive(
+    name = "remote_java_tools_linux",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
+http_archive(
+    name = "remote_java_tools_windows",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
+http_archive(
+    name = "remote_java_tools_darwin",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
 EOF
     fi
 
diff --git a/src/test/shell/bazel/bazel_java14_test.sh b/src/test/shell/bazel/bazel_java14_test.sh
index ed82037..6dc78ef 100755
--- a/src/test/shell/bazel/bazel_java14_test.sh
+++ b/src/test/shell/bazel/bazel_java14_test.sh
@@ -56,6 +56,7 @@
 
 JAVA_TOOLCHAIN="$1"; shift
 JAVA_TOOLS_ZIP="$1"; shift
+JAVA_TOOLS_PREBUILT_ZIP="$1"; shift
 JAVA_RUNTIME="$1"; shift
 
 echo "JAVA_TOOLS_ZIP=$JAVA_TOOLS_ZIP"
@@ -65,10 +66,13 @@
 
 if "$is_windows"; then
     JAVA_TOOLS_ZIP_FILE_URL="file:///${JAVA_TOOLS_RLOCATION}"
+    JAVA_TOOLS_PREBUILT_ZIP_FILE_URL="file:///$(rlocation io_bazel/$JAVA_TOOLS_PREBUILT_ZIP)"
 else
     JAVA_TOOLS_ZIP_FILE_URL="file://${JAVA_TOOLS_RLOCATION}"
+    JAVA_TOOLS_PREBUILT_ZIP_FILE_URL="file://$(rlocation io_bazel/$JAVA_TOOLS_PREBUILT_ZIP)"
 fi
 JAVA_TOOLS_ZIP_FILE_URL=${JAVA_TOOLS_ZIP_FILE_URL:-}
+JAVA_TOOLS_PREBUILT_ZIP_FILE_URL=${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL:-}
 
 add_to_bazelrc "build --java_toolchain=${JAVA_TOOLCHAIN}"
 add_to_bazelrc "build --host_java_toolchain=${JAVA_TOOLCHAIN}"
@@ -81,9 +85,21 @@
 # java_tools versions only used to test Bazel with various JDK toolchains.
 
 http_archive(
-    name = "local_java_tools",
+    name = "remote_java_tools",
     urls = ["${JAVA_TOOLS_ZIP_FILE_URL}"]
 )
+http_archive(
+    name = "remote_java_tools_linux",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
+http_archive(
+    name = "remote_java_tools_windows",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
+http_archive(
+    name = "remote_java_tools_darwin",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
 EOF
     cat $(rlocation io_bazel/src/test/shell/bazel/testdata/jdk_http_archives) >> WORKSPACE
 }
diff --git a/src/test/shell/bazel/bazel_java15_test.sh b/src/test/shell/bazel/bazel_java15_test.sh
index 124e40a..fd09a33 100755
--- a/src/test/shell/bazel/bazel_java15_test.sh
+++ b/src/test/shell/bazel/bazel_java15_test.sh
@@ -56,6 +56,7 @@
 
 JAVA_TOOLCHAIN="$1"; shift
 JAVA_TOOLS_ZIP="$1"; shift
+JAVA_TOOLS_PREBUILT_ZIP="$1"; shift
 JAVA_RUNTIME="$1"; shift
 
 echo "JAVA_TOOLS_ZIP=$JAVA_TOOLS_ZIP"
@@ -65,10 +66,13 @@
 
 if "$is_windows"; then
     JAVA_TOOLS_ZIP_FILE_URL="file:///${JAVA_TOOLS_RLOCATION}"
+    JAVA_TOOLS_PREBUILT_ZIP_FILE_URL="file:///$(rlocation io_bazel/$JAVA_TOOLS_PREBUILT_ZIP)"
 else
     JAVA_TOOLS_ZIP_FILE_URL="file://${JAVA_TOOLS_RLOCATION}"
+    JAVA_TOOLS_PREBUILT_ZIP_FILE_URL="file://$(rlocation io_bazel/$JAVA_TOOLS_PREBUILT_ZIP)"
 fi
 JAVA_TOOLS_ZIP_FILE_URL=${JAVA_TOOLS_ZIP_FILE_URL:-}
+JAVA_TOOLS_PREBUILT_ZIP_FILE_URL=${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL:-}
 
 add_to_bazelrc "build --java_toolchain=${JAVA_TOOLCHAIN}"
 add_to_bazelrc "build --host_java_toolchain=${JAVA_TOOLCHAIN}"
@@ -81,9 +85,21 @@
 # java_tools versions only used to test Bazel with various JDK toolchains.
 
 http_archive(
-    name = "local_java_tools",
+    name = "remote_java_tools",
     urls = ["${JAVA_TOOLS_ZIP_FILE_URL}"]
 )
+http_archive(
+    name = "remote_java_tools_linux",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
+http_archive(
+    name = "remote_java_tools_windows",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
+http_archive(
+    name = "remote_java_tools_darwin",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
 EOF
     cat $(rlocation io_bazel/src/test/shell/bazel/testdata/jdk_http_archives) >> WORKSPACE
 }
diff --git a/src/test/shell/bazel/bazel_java_test.sh b/src/test/shell/bazel/bazel_java_test.sh
index b544b21..8eeb55d 100755
--- a/src/test/shell/bazel/bazel_java_test.sh
+++ b/src/test/shell/bazel/bazel_java_test.sh
@@ -71,6 +71,18 @@
 fi
 JAVA_TOOLS_ZIP_FILE_URL=${JAVA_TOOLS_ZIP_FILE_URL:-}
 
+JAVA_TOOLS_PREBUILT_ZIP="$1"; shift
+if [[ "${JAVA_TOOLS_PREBUILT_ZIP}" != "released" ]]; then
+  if [[ "${JAVA_TOOLS_PREBUILT_ZIP}" == file* ]]; then
+    JAVA_TOOLS_PREBUILT_ZIP_FILE_URL="${JAVA_TOOLS_PREBUILT_ZIP}"
+  elif "$is_windows"; then
+    JAVA_TOOLS_PREBUILT_ZIP_FILE_URL="file:///$(rlocation io_bazel/JAVA_TOOLS_PREBUILT_ZIP)"
+  else
+    JAVA_TOOLS_PREBUILT_ZIP_FILE_URL="file://$(rlocation io_bazel/JAVA_TOOLS_PREBUILT_ZIP)"
+  fi
+fi
+JAVA_TOOLS_PREBUILT_ZIP_FILE_URL=${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL:-}
+
 if [[ $# -gt 0 ]]; then
   JAVABASE_VALUE="$1"; shift
   add_to_bazelrc "build --javabase=${JAVABASE_VALUE}"
@@ -88,9 +100,21 @@
   if [[ ! -z "${JAVA_TOOLS_ZIP_FILE_URL}" ]]; then
     cat >>WORKSPACE <<EOF
 http_archive(
-    name = "local_java_tools",
+    name = "remote_java_tools",
     urls = ["${JAVA_TOOLS_ZIP_FILE_URL}"]
 )
+http_archive(
+    name = "remote_java_tools_linux",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
+http_archive(
+    name = "remote_java_tools_windows",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
+http_archive(
+    name = "remote_java_tools_darwin",
+    urls = ["${JAVA_TOOLS_PREBUILT_ZIP_FILE_URL}"]
+)
 EOF
   fi
 
diff --git a/src/test/shell/bazel/bazel_java_tools_dist_test.sh b/src/test/shell/bazel/bazel_java_tools_dist_test.sh
index 3703d51..acb8191 100755
--- a/src/test/shell/bazel/bazel_java_tools_dist_test.sh
+++ b/src/test/shell/bazel/bazel_java_tools_dist_test.sh
@@ -19,8 +19,6 @@
 
 set -euo pipefail
 
-JAVA_TOOLS_JAVA_VERSION="$1"; shift
-
 # --- begin runfiles.bash initialization ---
 if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
     if [[ -f "$0.runfiles_manifest" ]]; then
@@ -71,8 +69,8 @@
 function expect_path_in_java_tools() {
   path="$1"; shift
 
-  (zipinfo -1 $(rlocation io_bazel/src/java_tools_dist_${JAVA_TOOLS_JAVA_VERSION}.zip) \
-    | grep -c "$path") >& ${TEST_log} || fail "Path $path not found in java_tools_${JAVA_TOOLS_JAVA_VERSION}.zip"
+  (zipinfo -1 $(rlocation io_bazel/src/java_tools_dist.zip) \
+    | grep -c "$path") >& ${TEST_log} || fail "Path $path not found in java_tools_dist.zip"
 }
 
 function test_java_tools_has_ijar() {
diff --git a/src/test/shell/bazel/bazel_java_tools_test.sh b/src/test/shell/bazel/bazel_java_tools_test.sh
index e554a58..db1c8aa 100755
--- a/src/test/shell/bazel/bazel_java_tools_test.sh
+++ b/src/test/shell/bazel/bazel_java_tools_test.sh
@@ -17,8 +17,6 @@
 # Load the test setup defined in the parent directory
 set -euo pipefail
 
-JAVA_TOOLS_JAVA_VERSION="$1"; shift
-
 # --- begin runfiles.bash initialization ---
 if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
     if [[ -f "$0.runfiles_manifest" ]]; then
@@ -66,33 +64,51 @@
 fi
 
 function set_up() {
-  local java_tools_rlocation=$(rlocation io_bazel/src/java_tools_${JAVA_TOOLS_JAVA_VERSION}.zip)
+  local java_tools_rlocation=$(rlocation io_bazel/src/java_tools.zip)
   local java_tools_zip_file_url="file://${java_tools_rlocation}"
   if "$is_windows"; then
         java_tools_zip_file_url="file:///${java_tools_rlocation}"
   fi
+  local java_tools_prebuilt_rlocation=$(rlocation io_bazel/src/java_tools_prebuilt.zip)
+  local java_tools_prebuilt_zip_file_url="file://${java_tools_prebuilt_rlocation}"
+  if "$is_windows"; then
+        java_tools_prebuilt_zip_file_url="file:///${java_tools_prebuilt_rlocation}"
+  fi
   cat > WORKSPACE <<EOF
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 http_archive(
     name = "local_java_tools",
     urls = ["${java_tools_zip_file_url}"]
 )
+http_archive(
+    name = "local_java_tools_prebuilt",
+    urls = ["${java_tools_prebuilt_zip_file_url}"]
+)
 EOF
 }
 
 function expect_path_in_java_tools() {
   path="$1"; shift
 
-  count=$(zipinfo -1 $(rlocation io_bazel/src/java_tools_${JAVA_TOOLS_JAVA_VERSION}.zip) | grep -c "$path")
-  [[ "$count" -gt 0 ]] || fail "Path $path not found in java_tools_${JAVA_TOOLS_JAVA_VERSION}.zip"
+  count=$(zipinfo -1 $(rlocation io_bazel/src/java_tools.zip) | grep -c "$path")
+  [[ "$count" -gt 0 ]] || fail "Path $path not found in java_tools.zip"
 }
 
+function expect_path_in_java_tools_prebuilt() {
+  path="$1"; shift
+
+  count=$(zipinfo -1 $(rlocation io_bazel/src/java_tools_prebuilt.zip) | grep -c "$path")
+  [[ "$count" -gt 0 ]] || fail "Path $path not found in java_tools_prebuilt.zip"
+}
+
+
 function test_java_tools_has_ijar() {
   expect_path_in_java_tools "java_tools/ijar"
+  expect_path_in_java_tools_prebuilt "java_tools/ijar"
 }
 
 function test_java_tools_has_ijar_binary() {
-  expect_path_in_java_tools "java_tools/ijar/ijar"
+  expect_path_in_java_tools_prebuilt "java_tools/ijar/ijar"
 }
 
 function test_java_tools_has_zlib() {
@@ -113,10 +129,11 @@
 
 function test_java_tools_has_singlejar() {
   expect_path_in_java_tools "java_tools/src/tools/singlejar"
+  expect_path_in_java_tools_prebuilt "java_tools/src/tools/singlejar"
 }
 
 function test_java_tools_has_singlejar_local() {
-  expect_path_in_java_tools "java_tools/src/tools/singlejar/singlejar_local"
+  expect_path_in_java_tools_prebuilt "java_tools/src/tools/singlejar/singlejar_local"
 }
 
 function test_java_tools_has_VanillaJavaBuilder() {
@@ -176,7 +193,7 @@
 }
 
 function test_java_tools_toolchain_builds() {
-  bazel build @local_java_tools//:toolchain || fail "toolchain failed to build"
+  bazel build @bazel_tools//tools/jdk:toolchain || fail "toolchain failed to build"
 }
 
 function test_java_tools_singlejar_builds() {
@@ -187,93 +204,4 @@
   bazel build @local_java_tools//:ijar_cc_binary || fail "ijar failed to build"
 }
 
-function test_java_toolchain_default_manualConfiguration() {
-  cat > BUILD <<EOF
-load("@local_java_tools//:java_toolchain_default.bzl", "java_toolchain_default")
-java_toolchain_default(
-  name = "vanilla",
-  javabuilder = ["//:VanillaJavaBuilder"],
-  jvm_opts = [],
-)
-EOF
-  bazel build //:vanilla || fail "java_toolchain_default target failed to build"
-}
-
-function test_java_toolchain_default_manualConfigurationWithLocation() {
-  cat > BUILD <<EOF
-load("@local_java_tools//:java_toolchain_default.bzl", "java_toolchain_default", "JDK9_JVM_OPTS")
-java_toolchain_default(
-  name = "toolchain",
-  jvm_opts = [
-      # In JDK9 we have seen a ~30% slow down in JavaBuilder performance when using
-      # G1 collector and having compact strings enabled.
-      "-XX:+UseParallelOldGC",
-      "-XX:-CompactStrings",
-      # override the javac in the JDK.
-      "--patch-module=java.compiler=\$(location //:java_compiler_jar)",
-      "--patch-module=jdk.compiler=\$(location //:jdk_compiler_jar)",
-  ] + JDK9_JVM_OPTS,
-  tools = [
-      "//:java_compiler_jar",
-      "//:jdk_compiler_jar",
-    ],
-)
-EOF
-  bazel build //:toolchain || fail "java_toolchain_default target failed to build"
-}
-
-function test_java_toolchain_default_jvm8Toolchain() {
-  cat > BUILD <<EOF
-load("@local_java_tools//:java_toolchain_default.bzl", "java_toolchain_default", "JVM8_TOOLCHAIN_CONFIGURATION")
-java_toolchain_default(
-  name = "jvm8_toolchain",
-  configuration = JVM8_TOOLCHAIN_CONFIGURATION,
-)
-EOF
-  bazel build //:jvm8_toolchain || fail "java_toolchain_default target failed to build"
-}
-
-function test_java_toolchain_default_javabuilderToolchain() {
-  cat > BUILD <<EOF
-load("@local_java_tools//:java_toolchain_default.bzl", "java_toolchain_default", "JAVABUILDER_TOOLCHAIN_CONFIGURATION")
-java_toolchain_default(
-  name = "javabuilder_toolchain",
-  configuration = JAVABUILDER_TOOLCHAIN_CONFIGURATION,
-)
-EOF
-  bazel build //:javabuilder_toolchain || fail "java_toolchain_default target failed to build"
-}
-
-function test_java_toolchain_default_vanillaToolchain() {
-  cat > BUILD <<EOF
-load("@local_java_tools//:java_toolchain_default.bzl", "java_toolchain_default", "VANILLA_TOOLCHAIN_CONFIGURATION")
-java_toolchain_default(
-  name = "vanilla_toolchain",
-  configuration = VANILLA_TOOLCHAIN_CONFIGURATION,
-)
-EOF
-  bazel build //:vanilla_toolchain || fail "java_toolchain_default target failed to build"
-}
-
-function test_java_toolchain_default_prebuiltToolchain() {
-  cat > BUILD <<EOF
-load("@local_java_tools//:java_toolchain_default.bzl", "java_toolchain_default", "PREBUILT_TOOLCHAIN_CONFIGURATION")
-java_toolchain_default(
-  name = "prebuilt_toolchain",
-  configuration = PREBUILT_TOOLCHAIN_CONFIGURATION,
-)
-EOF
-  bazel build //:prebuilt_toolchain || fail "java_toolchain_default target failed to build"
-}
-
-function test_java_toolchain_default_notInTools() {
-  cat > BUILD <<EOF
-load("@bazel_tools//tools/jdk:java_toolchain_default.bzl", "java_toolchain_default")
-filegroup(
-  name = "dummy",
-)
-EOF
-  (bazel build //:dummy && fail "java_toolchain_default accessible from @bazel_tools") || true
-}
-
 run_suite "Java tools archive tests"
diff --git a/src/tools/singlejar/BUILD b/src/tools/singlejar/BUILD
index 0bbc474..a2dd5b7 100644
--- a/src/tools/singlejar/BUILD
+++ b/src/tools/singlejar/BUILD
@@ -1,11 +1,10 @@
 load("@rules_java//java:defs.bzl", "java_library")
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
 
 # Description:
 #   singlejar C++ implementation.
 package(default_visibility = ["//src:__subpackages__"])
 
-load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
-
 filegroup(
     name = "srcs",
     srcs = glob(["**"]),
@@ -60,13 +59,22 @@
 
 genrule(
     name = "singlejar_zip",
-    srcs = SOURCES + [":singlejar_local"],
+    srcs = SOURCES,
     outs = ["singlejar.zip"],
     cmd = "$(location //src:zip_files) src/tools/singlejar $@ $$(echo $(SRCS) | sort)",
     tools = ["//src:zip_files"],
     visibility = ["//visibility:private"],
 )
 
+genrule(
+    name = "singlejar_deploy_zip",
+    srcs = [":singlejar_local"],
+    outs = ["singlejar_deploy.zip"],
+    cmd = "$(location //src:zip_files) src/tools/singlejar $@ $$(echo $(SRCS) | sort)",
+    tools = ["//src:zip_files"],
+    visibility = ["//src:__pkg__"],
+)
+
 cc_binary(
     name = "singlejar",
     srcs = [
diff --git a/src/upload_all_java_tools.sh b/src/upload_all_java_tools.sh
index f40004b..e8ef359 100755
--- a/src/upload_all_java_tools.sh
+++ b/src/upload_all_java_tools.sh
@@ -30,14 +30,19 @@
 
 case "$(uname -s | tr [:upper:] [:lower:])" in
 msys*|mingw*|cygwin*)
-  declare -r is_windows=true
+  declare -r platform=windows
+  ;;
+linux*)
+  declare -r platform=linux
   ;;
 *)
-  declare -r is_windows=false
+  declare -r platform=other
   ;;
 esac
 
-if "$is_windows"; then
+echo Platform: $platform
+
+if [[ "$platform" == "windows" ]]; then
   export MSYS_NO_PATHCONV=1
   export MSYS2_ARG_CONV_EXCL="*"
 fi
@@ -48,35 +53,47 @@
 
 # Passing the same commit_hash and timestamp to all targets to mark all the artifacts
 # uploaded on GCS with the same identifier.
-for java_version in 11; do
 
-    bazel build //src:java_tools_java${java_version}_zip
-    zip_path=${PWD}/bazel-bin/src/java_tools_java${java_version}.zip
+bazel build //src:java_tools_zip
+zip_path=${PWD}/bazel-bin/src/java_tools.zip
 
-    if "$is_windows"; then
-        # Windows needs "file:///c:/foo/bar".
-        file_url="file:///$(cygpath -m ${zip_path})"
-    else
-        # Non-Windows needs "file:///foo/bar".
-        file_url="file://${zip_path}"
-    fi
+bazel build //src:java_tools_prebuilt_zip
+prebuilt_zip_path=${PWD}/bazel-bin/src/java_tools_prebuilt.zip
 
-    # Skip for now, as the test is broken on Windows.
-    # See https://github.com/bazelbuild/bazel/issues/12244 for details
-    if not "$is_windows"; then
+if [[ "$platform" == "windows" ]]; then
+    # Windows needs "file:///c:/foo/bar".
+    file_url="file:///$(cygpath -m ${zip_path})"
+    prebuilt_file_url="file:///$(cygpath -m ${prebuilt_zip_path})"
+else
+    # Non-Windows needs "file:///foo/bar".
+    file_url="file://${zip_path}"
+    prebuilt_file_url="file://${prebuilt_zip_path}"
+fi
+
+# Skip for now, as the test is broken on Windows.
+# See https://github.com/bazelbuild/bazel/issues/12244 for details
+if [[ "$platform" != "windows" ]]; then
+    for java_version in 11 14 15; do
         bazel test --verbose_failures --test_output=all --nocache_test_results \
             //src/test/shell/bazel:bazel_java_test_local_java_tools_jdk${java_version} \
-            --define=LOCAL_JAVA_TOOLS_ZIP_URL="${file_url}"
-    fi
+            --define=LOCAL_JAVA_TOOLS_ZIP_URL="${file_url}" \
+            --define=LOCAL_JAVA_TOOLS_PREBUILT_ZIP_URL="${prebuilt_file_url}"
+    done
+fi
 
-    bazel run //src:upload_java_tools_java${java_version} -- \
-        --java_tools_zip src/java_tools_java${java_version}.zip \
+bazel run //src:upload_java_tools_prebuilt -- \
+    --commit_hash ${commit_hash} \
+    --timestamp ${timestamp} \
+    --bazel_version ${bazel_version}
+
+if [[ "$platform" == "linux" ]]; then
+    bazel run //src:upload_java_tools -- \
         --commit_hash ${commit_hash} \
         --timestamp ${timestamp} \
         --bazel_version ${bazel_version}
 
-    bazel run //src:upload_java_tools_dist_java${java_version} -- \
+    bazel run //src:upload_java_tools_dist -- \
         --commit_hash ${commit_hash} \
         --timestamp ${timestamp} \
         --bazel_version ${bazel_version}
-done
+fi
diff --git a/src/upload_java_tools.sh b/src/upload_java_tools.sh
index 4e21358..2dee86c 100755
--- a/src/upload_java_tools.sh
+++ b/src/upload_java_tools.sh
@@ -20,8 +20,7 @@
 # Mandatory flags:
 # --java_tools_zip       The workspace-relative path of a java_tools zip.
 # --gcs_java_tools_dir   The directory under bazel_java_tools on GCS where the zip is uploaded.
-# --java_version         The version of the javac the given zip embeds.
-# --platform             The name of the platform where the zip was built.
+# --platform             Optional: The name of the platform where the zip was built. (If empty the zip should be platform independent).
 
 set -euo pipefail
 
@@ -67,7 +66,6 @@
   case "$arg" in
     "--java_tools_zip") java_tools_zip_name="$val" ;;
     "--gcs_java_tools_dir") gcs_java_tools_dir="$val" ;;
-    "--java_version") java_version="$val" ;;
     "--platform") platform="$val" ;;
     "--commit_hash") commit_hash="$val" ;;
     "--timestamp") timestamp="$val" ;;
@@ -77,6 +75,7 @@
 done
 
 java_tools_zip=$(rlocation io_bazel/${java_tools_zip_name})
+platform=${platform:+"_"}${platform:-}
 
 # Create a temp directory and a writable temp zip file to add a README.md file to
 # the initial zip.
@@ -98,14 +97,14 @@
 
 $ git clone https://github.com/bazelbuild/bazel.git
 $ git checkout ${commit_hash}
-$ bazel build //src:java_tools_java${java_version}.zip
+$ bazel build //src:java_tools_prebuilt.zip
 EOF
 
 # Add the README.md file to the temp zip.
 zip -rv "${tmp_zip}" "${readme_file}"
 
 gsutil_cmd="gsutil"
-if [[ "$platform" == "windows" ]]; then
+if "$is_windows"; then
   gsutil_cmd="gsutil.cmd"
 fi
 
@@ -119,4 +118,4 @@
 
 # Upload the zip that contains the README.md to GCS.
 "$gsutil_cmd" cp "$zip_url" \
- "gs://bazel-mirror/bazel_java_tools/${gcs_java_tools_dir}/${commit_hash}/java${java_version}/java_tools_javac${java_version}_${platform}-${timestamp}.zip"
+ "gs://bazel-mirror/bazel_java_tools/${gcs_java_tools_dir}/${commit_hash}/java/java_tools${platform}-${timestamp}.zip"
diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD
index 9e005b3..860804f 100644
--- a/tools/jdk/BUILD
+++ b/tools/jdk/BUILD
@@ -419,12 +419,12 @@
     srcs = [
         "BUILD.java_langtools",
         "BUILD.java_tools",
+        "BUILD.java_tools_prebuilt",
         "BUILD-jdk",  # Tools are build from the workspace for tests.
         "DumpPlatformClassPath.java",
         "default_java_toolchain.bzl",
         "fail_rule.bzl",
         "java_toolchain_alias.bzl",
-        "java_toolchain_default.bzl.java_tools",
         "jdk.BUILD",
         "local_java_repository.bzl",
         "nosystemjdk/README",
diff --git a/tools/jdk/BUILD.java_tools b/tools/jdk/BUILD.java_tools
index b68c186..78fb5e1 100644
--- a/tools/jdk/BUILD.java_tools
+++ b/tools/jdk/BUILD.java_tools
@@ -5,16 +5,7 @@
 licenses(["notice"])  # Apache 2.0
 
 load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_proto_library")
-load("@rules_java//java:defs.bzl", "java_binary", "java_import", "java_toolchain")
 load("@rules_proto//proto:defs.bzl", "proto_library")
-load(
-    ":java_toolchain_default.bzl",
-    "JAVABUILDER_TOOLCHAIN_CONFIGURATION",
-    "JVM8_TOOLCHAIN_CONFIGURATION",
-    "PREBUILT_TOOLCHAIN_CONFIGURATION",
-    "VANILLA_TOOLCHAIN_CONFIGURATION",
-    "java_toolchain_default",
-)
 
 SUPRESSED_WARNINGS = select({
     ":windows": [],
@@ -24,80 +15,6 @@
     ],
 })
 
-java_toolchain_default(
-    name = "toolchain",
-    configuration = JAVABUILDER_TOOLCHAIN_CONFIGURATION,
-)
-
-java_toolchain_default(
-    name = "toolchain_hostjdk8",
-    configuration = JVM8_TOOLCHAIN_CONFIGURATION,
-    source_version = "8",
-    target_version = "8",
-)
-
-# Default to the Java 8 language level.
-# TODO(cushon): consider if/when we should increment this?
-java_toolchain_default(
-    name = "legacy_toolchain",
-    configuration = JAVABUILDER_TOOLCHAIN_CONFIGURATION,
-    source_version = "8",
-    target_version = "8",
-)
-
-# Needed for openbsd / JVM8
-java_toolchain_default(
-    name = "legacy_toolchain_jvm8",
-    configuration = JVM8_TOOLCHAIN_CONFIGURATION,
-    source_version = "8",
-    target_version = "8",
-)
-
-java_toolchain_default(
-    name = "toolchain_vanilla",
-    configuration = VANILLA_TOOLCHAIN_CONFIGURATION,
-)
-
-RELEASES = (8, 9, 10, 11)
-
-[
-    (
-        java_toolchain_default(
-            name = "toolchain_java%d" % release,
-            configuration = JAVABUILDER_TOOLCHAIN_CONFIGURATION,
-            source_version = "%s" % release,
-            target_version = "%s" % release,
-        ),
-        # Needed for openbsd / JVM8
-        java_toolchain_default(
-            name = "toolchain_java%d_jvm8" % release,
-            configuration = JVM8_TOOLCHAIN_CONFIGURATION,
-            source_version = "%s" % release,
-            target_version = "%s" % release,
-        ),
-    )
-    for release in RELEASES
-]
-
-# A toolchain that targets java 14.
-java_toolchain_default(
-    name = "toolchain_jdk_14",
-    source_version = "14",
-    target_version = "14",
-)
-
-# A toolchain that targets java 15.
-java_toolchain_default(
-    name = "toolchain_jdk_15",
-    source_version = "15",
-    target_version = "15",
-)
-
-java_toolchain_default(
-    name = "prebuilt_toolchain",
-    configuration = PREBUILT_TOOLCHAIN_CONFIGURATION,
-)
-
 filegroup(
     name = "GenClass",
     srcs = ["java_tools/GenClass_deploy.jar"],
@@ -227,43 +144,6 @@
 )
 
 config_setting(
-    name = "remote",
-    values = {"define": "EXECUTOR=remote"},
-)
-
-config_setting(
-    name = "linux_x86_64",
-    constraint_values = [
-        "@platforms//os:linux",
-        "@platforms//cpu:x86_64",
-    ],
-)
-
-config_setting(
-    name = "darwin_x86_64",
-    constraint_values = [
-        "@platforms//os:macos",
-        "@platforms//cpu:x86_64",
-    ],
-)
-
-config_setting(
-    name = "darwin_arm64",
-    constraint_values = [
-        "@platforms//os:macos",
-        "@platforms//cpu:arm64",
-    ],
-)
-
-config_setting(
-    name = "darwin_arm64e",
-    constraint_values = [
-        "@platforms//os:macos",
-        "@platforms//cpu:arm64e",
-    ],
-)
-
-config_setting(
     name = "windows",
     constraint_values = ["@platforms//os:windows"],
 )
@@ -280,62 +160,6 @@
     visibility = ["//visibility:public"],
 )
 
-alias(
-    name = "singlejar",
-    actual = select({
-        "//:remote": ":singlejar_cc_bin",
-        "//conditions:default": ":singlejar_prebuilt_or_cc_binary",
-    }),
-)
-
-alias(
-    name = "singlejar_prebuilt_or_cc_binary",
-    actual = select({
-        ":linux_x86_64": "java_tools/src/tools/singlejar/singlejar_local",
-        ":darwin_x86_64": "java_tools/src/tools/singlejar/singlejar_local",
-        ":darwin_arm64": "java_tools/src/tools/singlejar/singlejar_local",
-        ":darwin_arm64e": "java_tools/src/tools/singlejar/singlejar_local",
-        ":windows": "java_tools/src/tools/singlejar/singlejar_local.exe",
-        "//conditions:default": "singlejar_cc_bin",
-    }),
-)
-
-alias(
-    name = "prebuilt_singlejar",
-    actual = select({
-        ":windows": "java_tools/src/tools/singlejar/singlejar_local.exe",
-        "//conditions:default": "java_tools/src/tools/singlejar/singlejar_local",
-    }),
-)
-
-alias(
-    name = "ijar",
-    actual = select({
-        ":remote": ":ijar_cc_binary",
-        "//conditions:default": ":prebuilt_binary_or_cc_binary",
-    }),
-)
-
-alias(
-    name = "prebuilt_binary_or_cc_binary",
-    actual = select({
-        ":linux_x86_64": ":ijar_prebuilt_binary",
-        ":darwin_x86_64": ":ijar_prebuilt_binary",
-        ":darwin_arm64": ":ijar_prebuilt_binary",
-        ":darwin_arm64e": ":ijar_prebuilt_binary",
-        ":windows": ":ijar_prebuilt_binary",
-        "//conditions:default": ":ijar_cc_binary",
-    }),
-)
-
-filegroup(
-    name = "ijar_prebuilt_binary",
-    srcs = select({
-        ":windows": ["java_tools/ijar/ijar.exe"],
-        "//conditions:default": ["java_tools/ijar/ijar"],
-    }),
-)
-
 cc_library(
     name = "malloc",
 )
diff --git a/tools/jdk/BUILD.java_tools_prebuilt b/tools/jdk/BUILD.java_tools_prebuilt
new file mode 100644
index 0000000..e293c72
--- /dev/null
+++ b/tools/jdk/BUILD.java_tools_prebuilt
@@ -0,0 +1,24 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])  # Apache 2.0
+
+config_setting(
+    name = "windows",
+    constraint_values = ["@platforms//os:windows"],
+)
+
+filegroup(
+    name = "prebuilt_singlejar",
+    srcs = select({
+        ":windows": ["java_tools/src/tools/singlejar/singlejar_local.exe"],
+        "//conditions:default": ["java_tools/src/tools/singlejar/singlejar_local"],
+    }),
+)
+
+filegroup(
+    name = "ijar_prebuilt_binary",
+    srcs = select({
+        ":windows": ["java_tools/ijar/ijar.exe"],
+        "//conditions:default": ["java_tools/ijar/ijar"],
+    }),
+)
\ No newline at end of file
diff --git a/tools/jdk/java_toolchain_default.bzl.java_tools b/tools/jdk/java_toolchain_default.bzl.java_tools
deleted file mode 100644
index 356c9fe..0000000
--- a/tools/jdk/java_toolchain_default.bzl.java_tools
+++ /dev/null
@@ -1,178 +0,0 @@
-# Copyright 2020 The Bazel Authors. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Bazel rules for creating Java toolchains."""
-
-_DEFAULT_JAVACOPTS = [
-    "-XDskipDuplicateBridges=true",
-    "-XDcompilePolicy=simple",
-    "-g",
-    "-parameters",
-]
-
-# JVM options, without patching java.compiler and jdk.compiler modules.
-JDK9_JVM_OPTS = [
-    # Allow JavaBuilder to access internal javac APIs.
-    "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
-    "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
-    "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
-    "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
-    "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
-    "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
-    "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
-    "--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
-
-    # quiet warnings from com.google.protobuf.UnsafeUtil,
-    # see: https://github.com/google/protobuf/issues/3781
-    # and: https://github.com/bazelbuild/bazel/issues/5599
-    "--add-opens=java.base/java.nio=ALL-UNNAMED",
-    "--add-opens=java.base/java.lang=ALL-UNNAMED",
-]
-
-# java_toolchain parameters without specifying javac, java.compiler,
-# jdk.compiler module, and jvm_opts
-_BASE_TOOLCHAIN_CONFIGURATION = dict(
-    forcibly_disable_header_compilation = False,
-    genclass = ["//:GenClass"],
-    header_compiler = ["//:TurbineDirect"],
-    header_compiler_direct = ["//:TurbineDirect"],
-    ijar = ["//:ijar"],
-    javabuilder = ["//:JavaBuilder"],
-    javac_supports_workers = True,
-    jacocorunner = "//:jacoco_coverage_runner_filegroup",
-    jvm_opts = JDK9_JVM_OPTS,
-    misc = _DEFAULT_JAVACOPTS,
-    singlejar = ["//:singlejar"],
-    # Code to enumerate target JVM boot classpath uses host JVM. Because
-    # java_runtime-s are involved, its implementation is in @bazel_tools.
-    bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath"],
-    source_version = "8",
-    target_version = "8",
-)
-
-JVM8_TOOLCHAIN_CONFIGURATION = dict(
-    tools = ["//:javac_jar"],
-    jvm_opts = ["-Xbootclasspath/p:$(location //:javac_jar)"],
-)
-
-JAVABUILDER_TOOLCHAIN_CONFIGURATION = dict(
-    jvm_opts = [
-        # In JDK9 we have seen a ~30% slow down in JavaBuilder performance when using
-        # G1 collector and having compact strings enabled.
-        "-XX:+UseParallelOldGC",
-        "-XX:-CompactStrings",
-        # override the javac in the JDK.
-        "--patch-module=java.compiler=$(location //:java_compiler_jar)",
-        "--patch-module=jdk.compiler=$(location //:jdk_compiler_jar)",
-    ] + JDK9_JVM_OPTS,
-    tools = [
-        "//:java_compiler_jar",
-        "//:jdk_compiler_jar",
-    ],
-)
-
-# The 'vanilla' toolchain is an unsupported alternative to the default.
-#
-# It does not provide any of the following features:
-#   * Error Prone
-#   * Strict Java Deps
-#   * Header Compilation
-#   * Reduced Classpath Optimization
-#
-# It uses the version of internal javac from the `--host_javabase` JDK instead
-# of providing a javac. Internal javac may not be source- or bug-compatible with
-# the javac that is provided with other toolchains.
-#
-# However it does allow using a wider range of `--host_javabase`s, including
-# versions newer than the current JDK.
-VANILLA_TOOLCHAIN_CONFIGURATION = dict(
-    forcibly_disable_header_compilation = True,
-    javabuilder = ["//:VanillaJavaBuilder"],
-    jvm_opts = [],
-)
-
-# The new toolchain is using all the pre-built tools, including
-# singlejar and ijar, even on remote execution. This toolchain
-# should be used only when host and execution platform are the
-# same, otherwise the binaries will not work on the execution
-# platform.
-PREBUILT_TOOLCHAIN_CONFIGURATION = dict(
-    jvm_opts = [
-        # In JDK9 we have seen a ~30% slow down in JavaBuilder performance when using
-        # G1 collector and having compact strings enabled.
-        "-XX:+UseParallelOldGC",
-        "-XX:-CompactStrings",
-        # override the javac in the JDK.
-        "--patch-module=java.compiler=$(location //:java_compiler_jar)",
-        "--patch-module=jdk.compiler=$(location //:jdk_compiler_jar)",
-    ] + JDK9_JVM_OPTS,
-    tools = [
-        "//:java_compiler_jar",
-        "//:jdk_compiler_jar",
-    ],
-    ijar = ["//:ijar_prebuilt_binary"],
-    singlejar = ["//:prebuilt_singlejar"],
-)
-
-_LABEL_LISTS = [
-    "bootclasspath",
-    "javac",
-    "tools",
-    "javabuilder",
-    "singlejar",
-    "genclass",
-    "resourcejar",
-    "ijar",
-    "header_compiler",
-    "header_compiler_direct",
-    "package_configuration",
-]
-
-_LABELS = [
-    "timezone_data",
-    "oneversion",
-    "oneversion_whitelist",
-    "jacocorunner",
-    "proguard_allowlister",
-    "java_runtime",
-]
-
-# Converts values to labels, so that they are resolved relative to this java_tools repository
-def _to_label(k, v):
-    if k in _LABELS and type(v) != type(Label("//a")):
-        return Label(v)
-    if k in _LABEL_LISTS and type(v) == type([Label("//a")]):
-        return [Label(label) if type(label) == type("") else label for label in v]
-    return v
-
-# Makes labels in jvm_opts absolute, that is replaces " //:"  with " @repo//:".
-def _format_jvm_opts(toolchain_args, repo):
-    jvm_opts = toolchain_args["jvm_opts"]
-    if [opt for opt in jvm_opts if opt.find(" :") >= 0] != []:
-        fail("Relative labels are not supported in jvm_opts parameter.")
-    jvm_opts = [opt.replace(" //:", " @{repo}//:").format(repo = repo) for opt in jvm_opts]
-    return dict(toolchain_args, jvm_opts = jvm_opts)
-
-def java_toolchain_default(name, configuration = dict(), **kwargs):
-    """Defines a java_toolchain with appropriate defaults for Bazel."""
-
-    toolchain_args = dict(_BASE_TOOLCHAIN_CONFIGURATION)
-    toolchain_args.update(configuration)
-    toolchain_args.update(kwargs)
-    toolchain_args = {k: _to_label(k, v) for k, v in toolchain_args.items()}
-    toolchain_args = _format_jvm_opts(toolchain_args, Label("//x").workspace_name)
-    native.java_toolchain(
-        name = name,
-        **toolchain_args
-    )