Remove ijar from the bazel binary.

Bazel now doesn't embed ijar anymore and uses ijar embeded in the Java tools remote repository.

Bazel embedded both ijar's source code (required by remote execution) and platform specific pre-built binaries. This change adds platform specific remote Java tools repository that include the corresponding pre-built ijar binary (for Windows, Darwin and Linux), alongside ijar's source code.

This change introduces a collection of macros that wrap the native rules `filegroup` and `java_import` and select a given target from the external java tools repository based on the current platform.

Progress on #6316.

Closes #7665.

PiperOrigin-RevId: 238613298
diff --git a/WORKSPACE b/WORKSPACE
index c70da29..45148c7 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -106,18 +106,24 @@
     archives = [
         "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip",
         "f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz",
-        "java_tools_pkg-0.6.tar.gz",
+        "java_tools_javac10_linux-x86_64-v1.0.tar.gz",
+        "java_tools_javac10_windows-x86_64-v1.0.zip",
+        "java_tools_javac10_darwin-v1.0.tar.gz",
     ],
     dirname = "derived/distdir",
     sha256 = {
         "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip": "fe2e04f91ce8c59d49d91b8102edc6627c6fa2906c1b0e7346f01419ec4f419d",
         "f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz": "ba5d15ca230efca96320085d8e4d58da826d1f81b444ef8afccd8b23e0799b52",
-        "java_tools_pkg-0.6.tar.gz": "81ed7c5231cd67df95dc4894a5cc32af67d29f388ee7117809531b948e61fca9",
+        "java_tools_javac10_linux-x86_64-v1.0.tar.gz": "1be7503530ce263f6c90139281f45e9ae4f681a8a362b93ad1ddef4f6db74ce5",
+        "java_tools_javac10_windows-x86_64-v1.0.zip": "15840585eb4db06c2ecc0e14749f96a0e253d9cee2c17b724fc60340d35c6a07",
+        "java_tools_javac10_darwin-v1.0.tar.gz": "a7d292c13c1dbd7def969ddafdf0207a0be5a3e2280fab9164b2c44fd37a82c6",
     },
     urls = {
         "e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip": ["https://github.com/google/desugar_jdk_libs/archive/e0b0291b2c51fbe5a7cfa14473a1ae850f94f021.zip"],
         "f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz": ["https://github.com/bazelbuild/bazel-skylib/archive/f83cb8dd6f5658bc574ccd873e25197055265d1c.tar.gz"],
-        "java_tools_pkg-0.6.tar.gz": ["https://mirror.bazel.build/bazel_java_tools/java_tools_pkg-0.6.tar.gz"],
+        "java_tools_javac10_linux-x86_64-v1.0.tar.gz": ["https://mirror.bazel.build/bazel_java_tools/java_tools_javac10_linux-x86_64-v1.0.tar.gz"],
+        "java_tools_javac10_windows-x86_64-v1.0.zip": ["https://mirror.bazel.build/bazel_java_tools/java_tools_javac10_windows-x86_64-v1.0.zip"],
+        "java_tools_javac10_darwin-v1.0.tar.gz": ["https://mirror.bazel.build/bazel_java_tools/java_tools_javac10_darwin-v1.0.tar.gz"],
     },
 )
 
@@ -232,8 +238,8 @@
     sha256 = "4b1468b254a572dbe134cc1fd7c6eab1618a72acd339749ea343bd8f55c3b7eb",
     strip_prefix = "bazel-toolchains-d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4",
     urls = [
-      "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz",
-      "https://github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz",
+        "https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz",
+        "https://github.com/bazelbuild/bazel-toolchains/archive/d665ccfa3e9c90fa789671bf4ef5f7c19c5715c4.tar.gz",
     ],
 )
 
@@ -287,7 +293,9 @@
         "zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz",
         "zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip",
         "jdk10-server-release-1804.tar.xz",
-        "java_tools_pkg-0.6.tar.gz",
+        "java_tools_javac10_linux-x86_64-v1.0.tar.gz",
+        "java_tools_javac10_windows-x86_64-v1.0.zip",
+        "java_tools_javac10_darwin-v1.0.tar.gz",
         "zulu11.2.3-jdk11.0.1-linux_x64.tar.gz",
         "zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz",
         "zulu11.2.3-jdk11.0.1-win_x64.zip",
@@ -305,7 +313,9 @@
         "zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz": "e669c9a897413d855b550b4e39d79614392e6fb96f494e8ef99a34297d9d85d3",
         "zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip": "c39e7700a8d41794d60985df5a20352435196e78ecbc6a2b30df7be8637bffd5",
         "jdk10-server-release-1804.tar.xz": "b7098b7aaf6ee1ffd4a2d0371a0be26c5a5c87f6aebbe46fe9a92c90583a84be",
-        "java_tools_pkg-0.6.tar.gz": "81ed7c5231cd67df95dc4894a5cc32af67d29f388ee7117809531b948e61fca9",
+        "java_tools_javac10_linux-x86_64-v1.0.tar.gz": "1be7503530ce263f6c90139281f45e9ae4f681a8a362b93ad1ddef4f6db74ce5",
+        "java_tools_javac10_windows-x86_64-v1.0.zip": "15840585eb4db06c2ecc0e14749f96a0e253d9cee2c17b724fc60340d35c6a07",
+        "java_tools_javac10_darwin-v1.0.tar.gz": "a7d292c13c1dbd7def969ddafdf0207a0be5a3e2280fab9164b2c44fd37a82c6",
         "zulu11.2.3-jdk11.0.1-linux_x64.tar.gz": "232b1c3511f0d26e92582b7c3cc363be7ac633e371854ca2f2e9f2b50eb72a75",
         "zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz": "1edf366ee821e5db8e348152fcb337b28dfd6bf0f97943c270dcc6747cedb6cb",
         "zulu11.2.3-jdk11.0.1-win_x64.zip": "8e1e2b8347de6746f3fd1538840dd643201533ab113abc4ed93678e342d28aa3",
@@ -322,7 +332,9 @@
         "zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz": ["https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-macosx_x64-allmodules.tar.gz"],
         "zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip": ["https://mirror.bazel.build/openjdk/azul-zulu10.2+3-jdk10.0.1/zulu10.2+3-jdk10.0.1-win_x64-allmodules.zip"],
         "jdk10-server-release-1804.tar.xz": ["https://mirror.bazel.build/openjdk.linaro.org/releases/jdk10-server-release-1804.tar.xz"],
-        "java_tools_pkg-0.6.tar.gz": ["https://mirror.bazel.build/bazel_java_tools/java_tools_pkg-0.6.tar.gz"],
+        "java_tools_javac10_linux-x86_64-v1.0.tar.gz": ["https://mirror.bazel.build/bazel_java_tools/java_tools_javac10_linux-x86_64-v1.0.tar.gz"],
+        "java_tools_javac10_windows-x86_64-v1.0.zip": ["https://mirror.bazel.build/bazel_java_tools/java_tools_javac10_windows-x86_64-v1.0.zip"],
+        "java_tools_javac10_darwin-v1.0.tar.gz": ["https://mirror.bazel.build/bazel_java_tools/java_tools_javac10_darwin-v1.0.tar.gz"],
         "zulu11.2.3-jdk11.0.1-linux_x64.tar.gz": ["https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-linux_x64.tar.gz"],
         "zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz": ["https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-macosx_x64.tar.gz"],
         "zulu11.2.3-jdk11.0.1-win_x64.zip": ["https://mirror.bazel.build/openjdk/azul-zulu11.2.3-jdk11.0.1/zulu11.2.3-jdk11.0.1-win_x64.zip"],
diff --git a/scripts/bootstrap/compile.sh b/scripts/bootstrap/compile.sh
index 3d53c3f..bc97e9e 100755
--- a/scripts/bootstrap/compile.sh
+++ b/scripts/bootstrap/compile.sh
@@ -264,9 +264,6 @@
   link_children "${PWD}" tools/python "${BAZEL_TOOLS_REPO}"
   link_children "${PWD}" tools "${BAZEL_TOOLS_REPO}"
 
-  # The BUILD file needed for @remote_java_tools.
-  link_file "${PWD}/third_party/java/java_tools/BUILD.pkg" "${BAZEL_TOOLS_REPO}/tools/jdk/BUILD.pkg"
-
   # Set up @bazel_tools//platforms properly
   mkdir -p ${BAZEL_TOOLS_REPO}/platforms
   cp tools/platforms/platforms.BUILD ${BAZEL_TOOLS_REPO}/platforms/BUILD
diff --git a/src/BUILD b/src/BUILD
index 23612c5..42fe48a 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -123,9 +123,8 @@
     "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/jarhelper:srcs",
     "//src/tools/singlejar:embedded_tools",
     "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:embedded_tools",
-    "//third_party/ijar",
+    # TODO(#6316): Move this target to the remote java tools archive.
     "//third_party/ijar:zipper",
-    "//third_party/ijar:embedded_tools",
     "//third_party/java/jacoco:srcs",
 ] + select({
     "//src/conditions:arm": [],
@@ -142,7 +141,6 @@
                "BUILD.tools",
                "//tools:embedded_tools_srcs",
                "//third_party:gpl-srcs",
-               "//third_party/java/java_tools:bazel_embedded_java_tools",
                "//third_party/java/j2objc:embedded_tools_srcs",
                "//third_party/py/concurrent:srcs",
                "//third_party/py/gflags:srcs",
diff --git a/src/create_embedded_tools.py b/src/create_embedded_tools.py
index c4ec47b..d1b09ae 100644
--- a/src/create_embedded_tools.py
+++ b/src/create_embedded_tools.py
@@ -28,21 +28,18 @@
 from src.create_embedded_tools_lib import is_executable
 
 output_paths = [
-    ('*tools/jdk/BUILD*', lambda x: 'tools/jdk/BUILD'),
+    ('*tools/jdk/BUILD', lambda x: 'tools/jdk/BUILD'),
     ('*tools/platforms/platforms.BUILD', lambda x: 'platforms/BUILD'),
     ('*tools/platforms/*', lambda x: 'platforms/' + os.path.basename(x)),
     ('*tools/cpp/runfiles/generated_*',
      lambda x: 'tools/cpp/runfiles/' + os.path.basename(x)[len('generated_'):]),
     ('*jarjar_command_deploy.jar',
      lambda x: 'tools/jdk/jarjar_command_deploy.jar'),
-    ('*BUILD.pkg', lambda x: 'tools/jdk/BUILD.pkg'),
-    ('*BUILD.javalangtools', lambda x: 'third_party/java/jdk/langtools/BUILD'),
+    ('*BUILD.java_langtools', lambda x: 'third_party/java/jdk/langtools/BUILD'),
     ('*singlejar_local.exe', lambda x: 'tools/jdk/singlejar/singlejar.exe'),
     ('*singlejar_local', lambda x: 'tools/jdk/singlejar/singlejar'),
     ('*launcher.exe', lambda x: 'tools/launcher/launcher.exe'),
     ('*def_parser.exe', lambda x: 'tools/def_parser/def_parser.exe'),
-    ('*ijar.exe', lambda x: 'tools/jdk/ijar/ijar.exe'),
-    ('*ijar', lambda x: 'tools/jdk/ijar/ijar'),
     ('*zipper.exe', lambda x: 'tools/zip/zipper/zipper.exe'),
     ('*zipper', lambda x: 'tools/zip/zipper/zipper'),
     ('*src/objc_tools/*',
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 274debd..fdef9e5 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
@@ -206,11 +206,29 @@
 )
 
 http_archive(
-    name = "remote_java_tools",
-    build_file = "@bazel_tools//tools/jdk:BUILD.pkg",
-    sha256 = "81ed7c5231cd67df95dc4894a5cc32af67d29f388ee7117809531b948e61fca9",
+    name = "remote_java_tools_linux",
+    build_file = "@bazel_tools//tools/jdk:BUILD.java_tools",
+    sha256 = "1be7503530ce263f6c90139281f45e9ae4f681a8a362b93ad1ddef4f6db74ce5",
     urls = [
-        "https://mirror.bazel.build/bazel_java_tools/java_tools_pkg-0.6.tar.gz",
+        "https://mirror.bazel.build/bazel_java_tools/java_tools_javac10_linux-x86_64-v1.0.tar.gz",
+    ],
+)
+
+http_archive(
+    name = "remote_java_tools_windows",
+    build_file = "@bazel_tools//tools/jdk:BUILD.java_tools",
+    sha256 = "15840585eb4db06c2ecc0e14749f96a0e253d9cee2c17b724fc60340d35c6a07",
+    urls = [
+        "https://mirror.bazel.build/bazel_java_tools/java_tools_javac10_windows-x86_64-v1.0.zip",
+    ],
+)
+
+http_archive(
+    name = "remote_java_tools_darwin",
+    build_file = "@bazel_tools//tools/jdk:BUILD.java_tools",
+    sha256 = "a7d292c13c1dbd7def969ddafdf0207a0be5a3e2280fab9164b2c44fd37a82c6",
+    urls = [
+        "https://mirror.bazel.build/bazel_java_tools/java_tools_javac10_darwin-v1.0.tar.gz",
     ],
 )
 
diff --git a/src/test/shell/bazel/bazel_java_test.sh b/src/test/shell/bazel/bazel_java_test.sh
index 04d0bd5..a29cdba 100755
--- a/src/test/shell/bazel/bazel_java_test.sh
+++ b/src/test/shell/bazel/bazel_java_test.sh
@@ -571,7 +571,7 @@
   cat > java/testrunners/BUILD <<EOF
 java_library(name = "test_runner",
              srcs = ['TestRunner.java'],
-             deps = ['@remote_java_tools//:java_tools/Runner_deploy.jar'],
+             deps = ['@bazel_tools//tools/jdk:TestRunner'],
 )
 
 java_test(name = "Tests",
diff --git a/src/test/shell/bazel/testdata/embedded_tools_srcs_deps b/src/test/shell/bazel/testdata/embedded_tools_srcs_deps
index 45aab3d..95b4a12 100644
--- a/src/test/shell/bazel/testdata/embedded_tools_srcs_deps
+++ b/src/test/shell/bazel/testdata/embedded_tools_srcs_deps
@@ -6,7 +6,6 @@
 //tools/test:tw_lib
 //tools/test:xml
 //third_party/ijar:zipper
-//third_party/ijar:ijar
 //third_party/ijar:zip
 //third_party/ijar:zlib_client
 //third_party/ijar:platform_utils
diff --git a/tools/android/BUILD.tools b/tools/android/BUILD.tools
index dcd57eb..acca19a 100644
--- a/tools/android/BUILD.tools
+++ b/tools/android/BUILD.tools
@@ -108,8 +108,8 @@
     name = "ijar_desugared_java8_legacy_libs",
     srcs = ["desugared_java8_legacy_libs"],
     outs = ["desugared_java8_legacy_libs-ijar.jar"],
-    cmd = "$(location //third_party/ijar) $< $@",
-    tools = ["//third_party/ijar"],
+    cmd = "$(location @bazel_tools//tools/jdk:ijar) $< $@",
+    tools = ["@bazel_tools//tools/jdk:ijar"],
     visibility = ["//visibility:private"],
 )
 
diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD
index b3962fa..ecd2fa78 100644
--- a/tools/jdk/BUILD
+++ b/tools/jdk/BUILD
@@ -13,6 +13,11 @@
     "legacy_java_toolchain_alias",
     "legacy_java_runtime_alias",
 )
+load(
+    "//tools/jdk:remote_java_tools_aliases.bzl",
+    "remote_java_tools_filegroup",
+    "remote_java_tools_java_import",
+)
 
 package(default_visibility = ["//visibility:public"])
 
@@ -126,12 +131,9 @@
 # On Windows, executables end in ".exe", but the label we reach it through
 # must be platform-independent. Thus, we create a little filegroup that
 # contains the appropriate platform-dependent file.
-filegroup(
+remote_java_tools_filegroup(
     name = "ijar",
-    srcs = select({
-        "//src/conditions:remote": ["//third_party/ijar:ijar"],
-        "//conditions:default": glob(["ijar/*"]),
-    }),
+    target = ":ijar",
 )
 
 # On Windows, Java implementation of singlejar is used. We create a little
@@ -148,101 +150,101 @@
     }),
 )
 
-exports_files(["BUILD.pkg"])
+exports_files(["BUILD.java_tools"])
 
-filegroup(
+remote_java_tools_filegroup(
     name = "genclass",
-    srcs = ["@remote_java_tools//:GenClass"],
+    target = ":GenClass",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "GenClass_deploy.jar",
-    srcs = ["@remote_java_tools//:java_tools/GenClass_deploy.jar"],
+    target = ":java_tools/GenClass_deploy.jar",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "bazel-singlejar_deploy.jar",
-    srcs = ["@remote_java_tools//:java_tools/bazel-singlejar_deploy.jar"],
+    target = ":java_tools/bazel-singlejar_deploy.jar",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "turbine",
-    srcs = ["@remote_java_tools//:Turbine"],
+    target = ":Turbine",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "turbine_deploy.jar",
-    srcs = ["@remote_java_tools//:java_tools/turbine_deploy.jar"],
+    target = ":java_tools/turbine_deploy.jar",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "turbine_direct",
-    srcs = ["@remote_java_tools//:TurbineDirect"],
+    target = ":TurbineDirect",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "turbine_direct_binary_deploy.jar",
-    srcs = ["@remote_java_tools//:java_tools/turbine_direct_binary_deploy.jar"],
+    target = ":java_tools/turbine_direct_binary_deploy.jar",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "javabuilder",
-    srcs = ["@remote_java_tools//:JavaBuilder"],
+    target = ":JavaBuilder",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "JavaBuilder_deploy.jar",
-    srcs = ["@remote_java_tools//:java_tools/JavaBuilder_deploy.jar"],
+    target = ":java_tools/JavaBuilder_deploy.jar",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "vanillajavabuilder",
-    srcs = ["@remote_java_tools//:VanillaJavaBuilder"],
+    target = ":VanillaJavaBuilder",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "javac_jar",
-    srcs = ["@remote_java_tools//:javac_jar"],
+    target = ":javac_jar",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "jdk_compiler_jar",
-    srcs = ["@remote_java_tools//:jdk_compiler_jar"],
+    target = ":jdk_compiler_jar",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "java_compiler_jar",
-    srcs = ["@remote_java_tools//:java_compiler_jar"],
+    target = ":java_compiler_jar",
 )
 
-java_import(
+remote_java_tools_java_import(
     name = "JacocoCoverageRunner",
-    jars = ["@remote_java_tools//:java_tools/JacocoCoverage_jarjar_deploy.jar"],
+    target = ":java_tools/JacocoCoverage_jarjar_deploy.jar",
 )
 
-java_import(
+remote_java_tools_java_import(
     name = "JacocoCoverage",
-    jars = ["@remote_java_tools//:java_tools/JacocoCoverage_jarjar_deploy.jar"],
+    target = ":java_tools/JacocoCoverage_jarjar_deploy.jar",
 )
 
-java_import(
+remote_java_tools_java_import(
     name = "TestRunner",
-    jars = ["@remote_java_tools//:java_tools/Runner_deploy.jar"],
+    target = ":java_tools/Runner_deploy.jar",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "TestRunner_deploy.jar",
-    srcs = ["@remote_java_tools//:java_tools/Runner_deploy.jar"],
+    target = ":java_tools/Runner_deploy.jar",
 )
 
-java_import(
+remote_java_tools_java_import(
     name = "ExperimentalTestRunner",
-    jars = ["@remote_java_tools//:java_tools/ExperimentalRunner_deploy.jar"],
+    target = ":java_tools/ExperimentalRunner_deploy.jar",
 )
 
-filegroup(
+remote_java_tools_filegroup(
     name = "ExperimentalRunner_deploy.jar",
-    srcs = ["@remote_java_tools//:java_tools/ExperimentalRunner_deploy.jar"],
+    target = ":java_tools/ExperimentalRunner_deploy.jar",
 )
 
 BOOTCLASS_JARS = [
@@ -359,6 +361,8 @@
 filegroup(
     name = "srcs",
     srcs = [
+        "BUILD.java_langtools",
+        "BUILD.java_tools",
         "BUILD-jdk",  # Tools are build from the workspace for tests.
         "DumpPlatformClassPath.java",
         "default_java_toolchain.bzl",
@@ -366,6 +370,7 @@
         "proguard_whitelister.py",
         "proguard_whitelister_test.py",
         "proguard_whitelister_test_input.cfg",
+        "remote_java_tools_aliases.bzl",
         "toolchain_utils.bzl",
     ],
 )
diff --git a/tools/jdk/BUILD.java_langtools b/tools/jdk/BUILD.java_langtools
new file mode 100644
index 0000000..0020800
--- /dev/null
+++ b/tools/jdk/BUILD.java_langtools
@@ -0,0 +1,24 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])  # Apache 2.0
+
+load(
+    "//tools/jdk:remote_java_tools_aliases.bzl",
+    "remote_java_tools_filegroup",
+)
+
+
+remote_java_tools_filegroup(
+    name = "javac_jar",
+    target = ":java_tools/javac-9+181-r4173-1.jar",
+)
+
+remote_java_tools_filegroup(
+    name = "jdk_compiler_jar",
+    target = ":java_tools/jdk_compiler.jar",
+)
+
+remote_java_tools_filegroup(
+    name = "java_compiler_jar",
+    target = ":java_tools/java_compiler.jar",
+)
diff --git a/tools/jdk/BUILD.java_tools b/tools/jdk/BUILD.java_tools
new file mode 100644
index 0000000..28ebe72
--- /dev/null
+++ b/tools/jdk/BUILD.java_tools
@@ -0,0 +1,292 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])  # Apache 2.0
+
+filegroup(
+    name = "ExperimentalRunner",
+    srcs = ["java_tools/ExperimentalRunner_deploy.jar"],
+)
+
+filegroup(
+    name = "GenClass",
+    srcs = ["java_tools/GenClass_deploy.jar"],
+)
+
+filegroup(
+    name = "JacocoCoverage",
+    srcs = ["java_tools/JacocoCoverage_jarjar_deploy.jar"],
+)
+
+filegroup(
+    name = "JavaBuilder",
+    srcs = ["java_tools/JavaBuilder_deploy.jar"],
+)
+
+filegroup(
+    name = "Runner",
+    srcs = ["java_tools/Runner_deploy.jar"],
+)
+
+filegroup(
+    name = "VanillaJavaBuilder",
+    srcs = ["java_tools/VanillaJavaBuilder_deploy.jar"],
+)
+
+filegroup(
+    name = "SingleJar",
+    srcs = ["java_tools/bazel-singlejar_deploy.jar"],
+)
+
+filegroup(
+    name = "JarJar",
+    srcs = ["java_tools/jarjar_command_deploy.jar"],
+)
+
+filegroup(
+    name = "Turbine",
+    srcs = ["java_tools/turbine_deploy.jar"],
+)
+
+filegroup(
+    name = "TurbineDirect",
+    srcs = ["java_tools/turbine_direct_binary_deploy.jar"],
+)
+
+filegroup(
+    name = "javac_jar",
+    srcs = ["java_tools/javac-9+181-r4173-1.jar"],
+)
+
+filegroup(
+    name = "jdk_compiler_jar",
+    srcs = ["java_tools/jdk_compiler.jar"],
+)
+
+filegroup(
+    name = "java_compiler_jar",
+    srcs = ["java_tools/java_compiler.jar"],
+)
+
+config_setting(
+    name = "remote",
+    values = {"define": "EXECUTOR=remote"},
+)
+
+config_setting(
+    name = "linux_x86_64",
+    values = {"cpu": "k8"},
+)
+
+config_setting(
+    name = "darwin",
+    values = {"cpu": "darwin"},
+)
+
+config_setting(
+    name = "darwin_x86_64",
+    values = {"cpu": "darwin_x86_64"},
+)
+
+config_setting(
+    name = "windows",
+    values = {"cpu": "x64_windows"},
+)
+
+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": ":ijar_prebuilt_binary",
+      ":darwin_x86_64": ":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_binary(
+    name = "ijar_cc_binary",
+    srcs = [
+        "java_tools/ijar/classfile.cc",
+        "java_tools/ijar/ijar.cc",
+    ],
+    deps = [":zip"],
+)
+
+cc_library(
+    name = "zip",
+    srcs = [
+        "java_tools/ijar/zip.cc",
+    ] + select({
+        ":windows": [
+            "java_tools/ijar/mapped_file_windows.cc",
+        ],
+        "//conditions:default": [
+            "java_tools/ijar/mapped_file_unix.cc",
+        ],
+    }),
+    hdrs = [
+        "java_tools/ijar/common.h",
+        "java_tools/ijar/mapped_file.h",
+        "java_tools/ijar/zip.h",
+    ],
+    deps = [
+        ":platform_utils",
+        ":zlib_client",
+    ] + select({
+        ":windows": [
+            ":errors",
+            ":filesystem",
+            ":logging",
+            ":strings",
+        ],
+        "//conditions:default": [
+        ],
+    }),
+    strip_include_prefix = "java_tools",
+    include_prefix = "third_party",
+)
+
+cc_library(
+    name = "platform_utils",
+    srcs = ["java_tools/ijar/platform_utils.cc"],
+    hdrs = [
+        "java_tools/ijar/common.h",
+        "java_tools/ijar/platform_utils.h",
+    ],
+    visibility = ["//visibility:private"],
+    deps = [
+        ":errors",
+        ":filesystem",
+        ":logging",
+    ],
+    strip_include_prefix = "java_tools",
+    include_prefix = "third_party",
+)
+
+cc_library(
+    name = "filesystem",
+    srcs = [
+        "java_tools/src/main/cpp/util/file.cc",
+        "java_tools/src/main/cpp/util/path.cc",
+    ] + select({
+        ":windows": [
+            "java_tools/src/main/cpp/util/file_windows.cc",
+            "java_tools/src/main/cpp/util/path_windows.cc",
+        ],
+        "//conditions:default": [
+            "java_tools/src/main/cpp/util/file_posix.cc",
+            "java_tools/src/main/cpp/util/path_posix.cc",
+        ],
+    }),
+    hdrs = [
+        "java_tools/src/main/cpp/util/file.h",
+        "java_tools/src/main/cpp/util/file_platform.h",
+        "java_tools/src/main/cpp/util/path.h",
+        "java_tools/src/main/cpp/util/path_platform.h",
+    ],
+    deps = [
+        ":blaze_exit_code",
+        ":errors",
+        ":logging",
+        ":strings",
+    ] + select({
+        ":windows": [":lib-file"],
+        "//conditions:default": [],
+    }),
+    strip_include_prefix = "java_tools",
+)
+
+cc_library(
+    name = "lib-file",
+    srcs = ["java_tools/src/main/native/windows/file.cc"],
+    hdrs = ["java_tools/src/main/native/windows/file.h"],
+    deps = [":lib-util"],
+    strip_include_prefix = "java_tools",
+)
+
+cc_library(
+    name = "lib-util",
+    srcs = ["java_tools/src/main/native/windows/util.cc"],
+    hdrs = ["java_tools/src/main/native/windows/util.h"],
+    strip_include_prefix = "java_tools",
+)
+
+cc_library(
+    name = "errors",
+    srcs = select({
+        ":windows": ["java_tools/src/main/cpp/util/errors_windows.cc"],
+        "//conditions:default": ["java_tools/src/main/cpp/util/errors_posix.cc"],
+    }),
+    hdrs = ["java_tools/src/main/cpp/util/errors.h"],
+    deps = [
+        ":logging",
+        ":port",
+        ":strings",
+    ],
+    strip_include_prefix = "java_tools",
+)
+
+cc_library(
+    name = "strings",
+    srcs = ["java_tools/src/main/cpp/util/strings.cc"],
+    hdrs = ["java_tools/src/main/cpp/util/strings.h"],
+    # Automatically propagate the symbol definition to rules depending on this.
+    defines = [
+        "BLAZE_OPENSOURCE",
+    ],
+    deps = [":blaze_exit_code"],
+    strip_include_prefix = "java_tools",
+)
+
+cc_library(
+    name = "blaze_exit_code",
+    hdrs = ["java_tools/src/main/cpp/util/exit_code.h"],
+    strip_include_prefix = "java_tools",
+)
+
+
+cc_library(
+    name = "port",
+    srcs = ["java_tools/src/main/cpp/util/port.cc"],
+    hdrs = ["java_tools/src/main/cpp/util/port.h"],
+    strip_include_prefix = "java_tools",
+)
+
+cc_library(
+    name = "logging",
+    srcs = ["java_tools/src/main/cpp/util/logging.cc"],
+    hdrs = ["java_tools/src/main/cpp/util/logging.h"],
+    deps = [
+        ":blaze_exit_code",
+        ":strings",
+    ],
+    strip_include_prefix = "java_tools",
+)
+
+cc_library(
+    name = "zlib_client",
+    srcs = ["java_tools/ijar/zlib_client.cc"],
+    hdrs = [
+        "java_tools/ijar/common.h",
+        "java_tools/ijar/zlib_client.h",
+    ],
+    deps = ["//java_tools/zlib"],
+    strip_include_prefix = "java_tools",
+    include_prefix = "third_party",
+)
diff --git a/tools/jdk/remote_java_tools_aliases.bzl b/tools/jdk/remote_java_tools_aliases.bzl
new file mode 100644
index 0000000..3ea91f2
--- /dev/null
+++ b/tools/jdk/remote_java_tools_aliases.bzl
@@ -0,0 +1,41 @@
+# Copyright 2017 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.
+
+"""A collection of macros that retrieve targets from the remote java tools."""
+
+def _get_args(target, attr, **kwargs):
+    workspace_target_dict = {
+        "//src/conditions:linux_x86_64": ["@remote_java_tools_linux//" + target],
+        "//src/conditions:darwin": ["@remote_java_tools_darwin//" + target],
+        "//src/conditions:darwin_x86_64": ["@remote_java_tools_darwin//" + target],
+        "//src/conditions:windows": ["@remote_java_tools_windows//" + target],
+        # On different platforms the linux repository can be used.
+        # The deploy jars inside the linux repository are platform-agnostic.
+        # The ijar target inside the repository identifies the different
+        # platform and builds ijar from source instead of returning the
+        # precompiled binary.
+        "//conditions:default": ["@remote_java_tools_linux//" + target],
+    }
+    workspace_target_select = select(workspace_target_dict)
+    args = dict({attr: workspace_target_select})
+    args.update(kwargs)
+    return args
+
+def remote_java_tools_filegroup(name, target, **kwargs):
+    args = _get_args(target, "srcs", **kwargs)
+    native.filegroup(name = name, **args)
+
+def remote_java_tools_java_import(name, target, **kwargs):
+    args = _get_args(target, "jars", **kwargs)
+    native.java_import(name = name, **args)