Add all dependencies for building to local Maven repositories

All dependencies required by Gradle are now in these two local Maven
repositories:

  third_party/dependencies
  third_party/dependencies_new

THe first is for the current Gradle builf. The second is the additional
dependencies required for the new Gradle setup in d8_r8.

The dependencies will be botstrapped from root settings.gradle (and
settings.gradle.kts) downloading these from GCS before build configuration.

Tested with both current and future Gradle build.

Test:
  rm -rf third_party/dependencies && \
  rm -f third_party/dependencies.tar.gz && \
  rm -rf third_party/dependencies_new && \
  rm -f third_party/dependencies_new.tar.gz && \
  rm -rf .gradle && \
  rm -rf .gradle && tools/gradle.py --gradle-user-home .gradle test --no-daemon

Test:
  rm -rf third_party/dependencies && \
  rm -f third_party/dependencies.tar.gz && \
  rm -rf third_party/dependencies_new && \
  rm -f third_party/dependencies_new.tar.gz && \
  rm -rf .gradle && \
  tools/gradle.py --new-gradle -q projects --gradle-user-home .gradle

The dependeicies have been collected through a trail and error process adding
missing dependencies until build and test succeeded.

third_party/dependencies contains the following libraries:

third_party/dependencies/antlr/antlr/2.7.7/antlr-2.7.7.pom
third_party/dependencies/com/android/support/support-annotations/25.4.0/support-annotations-25.4.0.pom
third_party/dependencies/com/android/support/support-compat/25.4.0/support-compat-25.4.0.pom
third_party/dependencies/com/android/support/support-core-ui/25.4.0/support-core-ui-25.4.0.pom
third_party/dependencies/com/android/support/support-core-utils/25.4.0/support-core-utils-25.4.0.pom
third_party/dependencies/com/android/support/support-fragment/25.4.0/support-fragment-25.4.0.pom
third_party/dependencies/com/android/support/support-media-compat/25.4.0/support-media-compat-25.4.0.pom
third_party/dependencies/com/android/support/support-v4/25.4.0/support-v4-25.4.0.pom
third_party/dependencies/com/android/support/test/espresso/espresso-core/3.0.0/espresso-core-3.0.0.pom
third_party/dependencies/com/android/support/test/espresso/espresso-idling-resource/3.0.0/espresso-idling-resource-3.0.0.pom
third_party/dependencies/com/android/support/test/rules/1.0.0/rules-1.0.0.pom
third_party/dependencies/com/android/support/test/runner/1.0.0/runner-1.0.0.pom
third_party/dependencies/com/android/tools/smali/smali/3.0.3/smali-3.0.3.pom
third_party/dependencies/com/android/tools/smali/smali-dexlib2/3.0.3/smali-dexlib2-3.0.3.pom
third_party/dependencies/com/android/tools/smali/smali-util/3.0.3/smali-util-3.0.3.pom
third_party/dependencies/com/beust/jcommander/1.48/jcommander-1.48.pom
third_party/dependencies/com/beust/jcommander/1.64/jcommander-1.64.pom
third_party/dependencies/com/github/ben-manes/caffeine/caffeine/3.0.5/caffeine-3.0.5.pom
third_party/dependencies/com/github/kevinstern/software-and-algorithms/1.0/software-and-algorithms-1.0.pom
third_party/dependencies/com/google/auto/auto-common/1.2.1/auto-common-1.2.1.pom
third_party/dependencies/com/google/auto/service/auto-service-aggregator/1.0.1/auto-service-aggregator-1.0.1.pom
third_party/dependencies/com/google/auto/service/auto-service-annotations/1.0.1/auto-service-annotations-1.0.1.pom
third_party/dependencies/com/google/auto/value/auto-value-annotations/1.9/auto-value-annotations-1.9.pom
third_party/dependencies/com/google/auto/value/auto-value-parent/1.9/auto-value-parent-1.9.pom
third_party/dependencies/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.pom
third_party/dependencies/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.pom
third_party/dependencies/com/google/code/gson/gson/2.7/gson-2.7.pom
third_party/dependencies/com/google/code/gson/gson-parent/2.7/gson-parent-2.7.pom
third_party/dependencies/com/google/errorprone/error_prone_annotation/2.18.0/error_prone_annotation-2.18.0.pom
third_party/dependencies/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.pom
third_party/dependencies/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.pom
third_party/dependencies/com/google/errorprone/error_prone_annotations/2.18.0/error_prone_annotations-2.18.0.pom
third_party/dependencies/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.pom
third_party/dependencies/com/google/errorprone/error_prone_check_api/2.18.0/error_prone_check_api-2.18.0.pom
third_party/dependencies/com/google/errorprone/error_prone_core/2.18.0/error_prone_core-2.18.0.pom
third_party/dependencies/com/google/errorprone/error_prone_parent/2.10.0/error_prone_parent-2.10.0.pom
third_party/dependencies/com/google/errorprone/error_prone_parent/2.11.0/error_prone_parent-2.11.0.pom
third_party/dependencies/com/google/errorprone/error_prone_parent/2.18.0/error_prone_parent-2.18.0.pom
third_party/dependencies/com/google/errorprone/error_prone_parent/2.7.1/error_prone_parent-2.7.1.pom
third_party/dependencies/com/google/errorprone/error_prone_type_annotations/2.18.0/error_prone_type_annotations-2.18.0.pom
third_party/dependencies/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom
third_party/dependencies/com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.pom
third_party/dependencies/com/google/guava/guava/31.1-android/guava-31.1-android.pom
third_party/dependencies/com/google/guava/guava/31.1-jre/guava-31.1-jre.pom
third_party/dependencies/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android.pom
third_party/dependencies/com/google/guava/guava-parent/31.0.1-jre/guava-parent-31.0.1-jre.pom
third_party/dependencies/com/google/guava/guava-parent/31.1-android/guava-parent-31.1-android.pom
third_party/dependencies/com/google/guava/guava-parent/31.1-jre/guava-parent-31.1-jre.pom
third_party/dependencies/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom
third_party/dependencies/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.pom
third_party/dependencies/com/google/protobuf/protobuf-bom/3.19.2/protobuf-bom-3.19.2.pom
third_party/dependencies/com/google/protobuf/protobuf-java/3.19.2/protobuf-java-3.19.2.pom
third_party/dependencies/com/google/protobuf/protobuf-parent/3.19.2/protobuf-parent-3.19.2.pom
third_party/dependencies/com/squareup/javawriter/2.1.1/javawriter-2.1.1.pom
third_party/dependencies/io/github/java-diff-utils/java-diff-utils/4.0/java-diff-utils-4.0.pom
third_party/dependencies/it/unimi/dsi/fastutil/7.2.1/fastutil-7.2.1.pom
third_party/dependencies/javax/inject/javax.inject/1/javax.inject-1.pom
third_party/dependencies/junit/junit/4.12/junit-4.12.pom
third_party/dependencies/junit/junit/4.13-beta-2/junit-4.13-beta-2.pom
third_party/dependencies/net/bytebuddy/byte-buddy/1.7.4/byte-buddy-1.7.4.pom
third_party/dependencies/net/bytebuddy/byte-buddy-agent/1.7.4/byte-buddy-agent-1.7.4.pom
third_party/dependencies/net/bytebuddy/byte-buddy-parent/1.7.4/byte-buddy-parent-1.7.4.pom
third_party/dependencies/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
third_party/dependencies/org/antlr/antlr/3.5.2/antlr-3.5.2.pom
third_party/dependencies/org/antlr/antlr-master/3.5.2/antlr-master-3.5.2.pom
third_party/dependencies/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2.pom
third_party/dependencies/org/antlr/ST4/4.0.8/ST4-4.0.8.pom
third_party/dependencies/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.pom
third_party/dependencies/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.pom
third_party/dependencies/org/checkerframework/checker-qual/3.19.0/checker-qual-3.19.0.pom
third_party/dependencies/org/checkerframework/dataflow-errorprone/3.27.0/dataflow-errorprone-3.27.0.pom
third_party/dependencies/org/eclipse/jgit/org.eclipse.jgit/4.4.1.201607150455-r/org.eclipse.jgit-4.4.1.201607150455-r.pom
third_party/dependencies/org/eclipse/jgit/org.eclipse.jgit-parent/4.4.1.201607150455-r/org.eclipse.jgit-parent-4.4.1.201607150455-r.pom
third_party/dependencies/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.pom
third_party/dependencies/org/hamcrest/hamcrest-integration/1.3/hamcrest-integration-1.3.pom
third_party/dependencies/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3.pom
third_party/dependencies/org/hamcrest/hamcrest-parent/1.3/hamcrest-parent-1.3.pom
third_party/dependencies/org/javassist/javassist/3.29.2-GA/javassist-3.29.2-GA.pom
third_party/dependencies/org/jetbrains/annotations/13.0/annotations-13.0.pom
third_party/dependencies/org/jetbrains/kotlin/kotlin-reflect/1.8.0/kotlin-reflect-1.8.0.pom
third_party/dependencies/org/jetbrains/kotlin/kotlin-stdlib/1.8.0/kotlin-stdlib-1.8.0.pom
third_party/dependencies/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.0/kotlin-stdlib-common-1.8.0.pom
third_party/dependencies/org/jetbrains/kotlinx/kotlinx-metadata-jvm/0.6.0/kotlinx-metadata-jvm-0.6.0.pom
third_party/dependencies/org/mockito/mockito-core/2.10.0/mockito-core-2.10.0.pom
third_party/dependencies/org/objenesis/objenesis/2.6/objenesis-2.6.pom
third_party/dependencies/org/objenesis/objenesis-parent/2.6/objenesis-parent-2.6.pom
third_party/dependencies/org/ow2/asm/asm/9.5/asm-9.5.pom
third_party/dependencies/org/ow2/asm/asm-analysis/9.5/asm-analysis-9.5.pom
third_party/dependencies/org/ow2/asm/asm-commons/9.5/asm-commons-9.5.pom
third_party/dependencies/org/ow2/asm/asm-tree/9.5/asm-tree-9.5.pom
third_party/dependencies/org/ow2/asm/asm-util/9.5/asm-util-9.5.pom
third_party/dependencies/org/ow2/ow2/1.5.1/ow2-1.5.1.pom
third_party/dependencies/org/pcollections/pcollections/3.1.4/pcollections-3.1.4.pom
third_party/dependencies/org/sonatype/oss/oss-parent/3/oss-parent-3.pom
third_party/dependencies/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
third_party/dependencies/org/sonatype/oss/oss-parent/9/oss-parent-9.pom
third_party/dependencies/org/testng/testng/6.10/testng-6.10.pom

third_party/dependncies_new contains the following libraries:

third_party/dependencies_new/net/java/dev/jna/jna/5.6.0/jna-5.6.0.pom
third_party/dependencies_new/net/ltgt/errorprone/net.ltgt.errorprone.gradle.plugin/3.0.1/net.ltgt.errorprone.gradle.plugin-3.0.1.pom
third_party/dependencies_new/net/ltgt/gradle/gradle-errorprone-plugin/3.0.1/gradle-errorprone-plugin-3.0.1.pom
third_party/dependencies_new/org/gradle/kotlin/gradle-kotlin-dsl-plugins/4.0.6/gradle-kotlin-dsl-plugins-4.0.6.pom
third_party/dependencies_new/org/gradle/kotlin/kotlin-dsl/org.gradle.kotlin.kotlin-dsl.gradle.plugin/4.0.6/org.gradle.kotlin.kotlin-dsl.gradle.plugin-4.0.6.pom
third_party/dependencies_new/org/jetbrains/annotations/13.0/annotations-13.0.pom
third_party/dependencies_new/org/jetbrains/intellij/deps/trove4j/1.0.20200330/trove4j-1.0.20200330.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-android-extensions/1.8.10/kotlin-android-extensions-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-annotation-processing-gradle/1.8.10/kotlin-annotation-processing-gradle-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-build-common/1.8.10/kotlin-build-common-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.8.10/kotlin-compiler-embeddable-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-compiler-runner/1.8.10/kotlin-compiler-runner-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-daemon-client/1.8.10/kotlin-daemon-client-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.8.10/kotlin-daemon-embeddable-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-gradle-plugin/1.8.10/kotlin-gradle-plugin-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1.8.10/kotlin-gradle-plugin-api-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-gradle-plugin-idea/1.8.10/kotlin-gradle-plugin-idea-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-gradle-plugin-idea-proto/1.8.10/kotlin-gradle-plugin-idea-proto-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-gradle-plugin-model/1.8.10/kotlin-gradle-plugin-model-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-klib-commonizer-api/1.8.10/kotlin-klib-commonizer-api-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-native-utils/1.8.10/kotlin-native-utils-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-project-model/1.8.10/kotlin-project-model-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-reflect/1.6.10/kotlin-reflect-1.6.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-reflect/1.8.10/kotlin-reflect-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-sam-with-receiver/1.8.10/kotlin-sam-with-receiver-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-scripting-common/1.8.10/kotlin-scripting-common-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-scripting-compiler-embeddable/1.8.10/kotlin-scripting-compiler-embeddable-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-scripting-compiler-impl-embeddable/1.8.10/kotlin-scripting-compiler-impl-embeddable-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-scripting-jvm/1.8.10/kotlin-scripting-jvm-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-script-runtime/1.8.10/kotlin-script-runtime-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-stdlib/1.6.10/kotlin-stdlib-1.6.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-stdlib/1.8.10/kotlin-stdlib-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-stdlib-common/1.6.10/kotlin-stdlib-common-1.6.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.10/kotlin-stdlib-common-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.10/kotlin-stdlib-jdk7-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.10/kotlin-stdlib-jdk8-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-tooling-core/1.8.10/kotlin-tooling-core-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-util-io/1.8.10/kotlin-util-io-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlin/kotlin-util-klib/1.8.10/kotlin-util-klib-1.8.10.pom
third_party/dependencies_new/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.5.0/kotlinx-coroutines-core-jvm-1.5.0.pom

Bug: b/280042032
Change-Id: If98c4a93cbb76aaea99538f540f3c2117eef20e9
diff --git a/build.gradle b/build.gradle
index 5df3bb4..35cc8df 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,14 +11,6 @@
 import tasks.DownloadDependency
 import tasks.GetJarsFromConfiguration
 
-buildscript {
-    repositories {
-        google()
-        mavenCentral()
-        gradlePluginPortal()
-    }
-}
-
 plugins {
   id "net.ltgt.errorprone" version "2.0.2"
 }
@@ -27,6 +19,8 @@
 apply plugin: 'idea'
 
 ext {
+    // When updating dependencies also update and run
+    // tools/create_local_maven_with_dependencies.py
     androidSupportVersion = '25.4.0'
     asmVersion = '9.5'  // When updating update tools/asmifier.py, build.src and Toolhelper as well.
     javassistVersion = '3.29.2-GA'
@@ -46,8 +40,9 @@
 }
 
 repositories {
-    google()
-    mavenCentral()
+    maven {
+        url uri('file:third_party/dependencies')
+    }
 }
 
 if (project.hasProperty('with_code_coverage')) {
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index 85815bd..dc6f3be 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -5,8 +5,9 @@
 apply plugin: 'idea'
 
 repositories {
-    google()
-    mavenCentral()
+    maven {
+        url uri('file:../third_party/dependencies')
+    }
 }
 
 ext {
diff --git a/commonBuildSrc/settings.gradle.kts b/commonBuildSrc/settings.gradle.kts
index 75c6675..f346f85 100644
--- a/commonBuildSrc/settings.gradle.kts
+++ b/commonBuildSrc/settings.gradle.kts
@@ -4,15 +4,23 @@
 
 pluginManagement {
     repositories {
-        gradlePluginPortal()
+        maven {
+            url = uri("file:../third_party/dependencies_new")
+        }
+        maven {
+            url = uri("file:../third_party/dependencies")
+        }
     }
 }
 
 dependencyResolutionManagement {
     repositories {
-        google()
-        mavenCentral()
-        gradlePluginPortal()
+        maven {
+            url = uri("file:../third_party/dependencies_new")
+        }
+        maven {
+            url = uri("file:../third_party/dependencies")
+        }
     }
 }
 
diff --git a/d8_r8/keepanno/settings.gradle.kts b/d8_r8/keepanno/settings.gradle.kts
index 7b4d459..c214cca 100644
--- a/d8_r8/keepanno/settings.gradle.kts
+++ b/d8_r8/keepanno/settings.gradle.kts
@@ -4,15 +4,24 @@
 
 pluginManagement {
     repositories {
-        gradlePluginPortal()
+        maven {
+            url = uri("file:../../third_party/dependencies")
+        }
+        maven {
+            url = uri("file:../../third_party/dependencies_new")
+        }
     }
 }
 
 dependencyResolutionManagement {
-    repositories {
-        mavenCentral()
-        gradlePluginPortal()
+  repositories {
+    maven {
+        url= uri("file:../../third_party/dependencies")
     }
+    maven {
+        url= uri("file:../../third_party/dependencies_new")
+    }
+  }
 }
 
 rootProject.name = "keepanno"
diff --git a/d8_r8/main/settings.gradle.kts b/d8_r8/main/settings.gradle.kts
index 2d727f0..347b7a4 100644
--- a/d8_r8/main/settings.gradle.kts
+++ b/d8_r8/main/settings.gradle.kts
@@ -4,15 +4,24 @@
 
 pluginManagement {
     repositories {
-        gradlePluginPortal()
+        maven {
+            url = uri("file:../../third_party/dependencies")
+        }
+        maven {
+            url = uri("file:../../third_party/dependencies_new")
+        }
     }
 }
 
 dependencyResolutionManagement {
-    repositories {
-        mavenCentral()
-        gradlePluginPortal()
+  repositories {
+    maven {
+        url= uri("file:../../third_party/dependencies")
     }
+    maven {
+        url= uri("file:../../third_party/dependencies_new")
+    }
+  }
 }
 
 rootProject.name = "r8"
diff --git a/d8_r8/settings.gradle.kts b/d8_r8/settings.gradle.kts
index 2feb93c..9d2dfa1 100644
--- a/d8_r8/settings.gradle.kts
+++ b/d8_r8/settings.gradle.kts
@@ -6,19 +6,67 @@
 
 pluginManagement {
     repositories {
-        gradlePluginPortal()
+        maven {
+            url = uri("file:../../third_party/dependencies")
+        }
+        maven {
+            url = uri("file:../../third_party/dependencies_new")
+        }
     }
 }
 
 dependencyResolutionManagement {
   repositories {
-    mavenCentral()
-    gradlePluginPortal()
+    maven {
+        url= uri("file:../third_party/dependencies")
+    }
+    maven {
+        url= uri("file:../third_party/dependencies_new")
+    }
   }
 }
 
 rootProject.name = "d8-r8"
 
+// Bootstrap building by downloading dependencies.
+fun String.execute() =
+    org.codehaus.groovy.runtime.ProcessGroovyMethods.execute(this)
+
+fun Process.out() =
+    String(
+        this.getInputStream().readAllBytes(),
+        java.nio.charset.StandardCharsets.UTF_8)
+fun Process.err() =
+    String(
+        this.getErrorStream().readAllBytes(),
+        java.nio.charset.StandardCharsets.UTF_8)
+
+val dependencies_bucket = "r8-deps"
+val dependencies_sha1_file = "third_party/dependencies.tar.gz.sha1"
+var cmd =
+        ("download_from_google_storage.py --extract"
+                + " --bucket ${dependencies_bucket}"
+                + " --sha1_file ${dependencies_sha1_file}")
+var process = cmd.execute()
+process.waitFor()
+if (process.exitValue() != 0) {
+    throw GradleException(
+            "Bootstrapping dependencies download failed:"
+            + "\n${process.err()}\n${process.out()}")
+}
+val dependencies_new_sha1_file = "third_party/dependencies_new.tar.gz.sha1"
+cmd =
+        ("download_from_google_storage.py --extract"
+                + " --bucket ${dependencies_bucket}"
+                + " --sha1_file ${dependencies_new_sha1_file}")
+process = cmd.execute()
+process.waitFor()
+if (process.exitValue() != 0) {
+    throw GradleException(
+            "Bootstrapping dependencies_new download failed:"
+            + "\n${process.err()}\n${process.out()}")
+}
+
 // This project is temporarily located in d8_r8. When moved to root, the parent
 // folder should just be removed.
 includeBuild(rootProject.projectDir.parentFile.resolve("commonBuildSrc"))
diff --git a/d8_r8/test/settings.gradle.kts b/d8_r8/test/settings.gradle.kts
index 3138d52..5946a12 100644
--- a/d8_r8/test/settings.gradle.kts
+++ b/d8_r8/test/settings.gradle.kts
@@ -2,13 +2,28 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-dependencyResolutionManagement {
+pluginManagement {
     repositories {
-        mavenCentral()
-        gradlePluginPortal()
+        maven {
+            url = uri("file:../../third_party/dependencies")
+        }
+        maven {
+            url = uri("file:../../third_party/dependencies_new")
+        }
     }
 }
 
+dependencyResolutionManagement {
+  repositories {
+    maven {
+        url= uri("file:../third_party/dependencies")
+    }
+    maven {
+        url= uri("file:../third_party/dependencies_new")
+    }
+  }
+}
+
 rootProject.name = "r8-tests"
 
 val root = rootProject.projectDir.parentFile
diff --git a/d8_r8/test_modules/tests_java_8/settings.gradle.kts b/d8_r8/test_modules/tests_java_8/settings.gradle.kts
index 290b820..6ab7fac 100644
--- a/d8_r8/test_modules/tests_java_8/settings.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/settings.gradle.kts
@@ -3,15 +3,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 pluginManagement {
-  repositories {
-    gradlePluginPortal()
-  }
+    repositories {
+        maven {
+            url = uri("file:../../../third_party/dependencies")
+        }
+        maven {
+            url = uri("file:../../../third_party/dependencies_new")
+        }
+    }
 }
 
 dependencyResolutionManagement {
   repositories {
-    mavenCentral()
-    gradlePluginPortal()
+    maven {
+        url= uri("file:../third_party/dependencies")
+    }
+    maven {
+        url= uri("file:../third_party/dependencies_new")
+    }
   }
 }
 
diff --git a/settings.gradle b/settings.gradle
index 9924d92..8ba5ad9 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -4,3 +4,16 @@
 
 rootProject.name = 'r8'
 
+// Bootstrap building by downloading dependencies.
+def dependencies_bucket = "r8-deps"
+def dependencies_sha1_file = "third_party/dependencies.tar.gz.sha1"
+def cmd =
+        ("download_from_google_storage.py --extract"
+                + " --bucket ${dependencies_bucket}"
+                + " --sha1_file ${dependencies_sha1_file}")
+def process = cmd.execute()
+process.waitFor()
+if (process.exitValue() != 0) {
+    throw new GradleException(
+            "Bootstrapping dependencies download failed:\n${process.err.text}")
+}
\ No newline at end of file
diff --git a/third_party/dependencies.tar.gz.sha1 b/third_party/dependencies.tar.gz.sha1
new file mode 100644
index 0000000..cf12fc2
--- /dev/null
+++ b/third_party/dependencies.tar.gz.sha1
@@ -0,0 +1 @@
+76c51489d87c284cea0e73646c5cc45a9ffc3665
\ No newline at end of file
diff --git a/third_party/dependencies_new.tar.gz.sha1 b/third_party/dependencies_new.tar.gz.sha1
new file mode 100644
index 0000000..54a7c72
--- /dev/null
+++ b/third_party/dependencies_new.tar.gz.sha1
@@ -0,0 +1 @@
+08dbd497e182be658628252f0bb890894cc88dcc
\ No newline at end of file
diff --git a/tools/create_local_maven_with_dependencies.py b/tools/create_local_maven_with_dependencies.py
new file mode 100755
index 0000000..296cdf0
--- /dev/null
+++ b/tools/create_local_maven_with_dependencies.py
@@ -0,0 +1,143 @@
+#!/usr/bin/env python3
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import argparse
+import os.path
+import subprocess
+import shutil
+import sys
+
+import utils
+
+REPOSITORIES = [
+  'Maven Central=https://repo1.maven.org/maven2/',
+  'Google=https://maven.google.com/',
+  "Gradle Plugins=https://plugins.gradle.org/m2/",
+]
+
+ANDRDID_SUPPORT_VERSION = '25.4.0'
+ASM_VERSION = '9.5'
+ESPRESSO_VERSION = '3.0.0'
+FASTUTIL_VERSION = '7.2.1'
+KOTLIN_METADATA_VERSION = '0.6.0'
+KOTLIN_VERSION = '1.8.0'
+GUAVA_VERSION = '31.1-jre'
+GSON_VERSION = '2.7'
+JAVASSIST_VERSION = '3.29.2-GA'
+JUNIT_VERSION = '4.13-beta-2'
+MOCKITO_VERSION = '2.10.0'
+SMALI_VERSION = '3.0.3'
+ERROR_PRONE_VERSION = '2.18.0'
+TESTNG_VERSION = '6.10'
+
+
+
+BUILD_DEPENDENCIES = [
+  'com.google.code.gson:gson:{version}'.format(version = GSON_VERSION),
+  'com.google.guava:guava:{version}'.format(version = GUAVA_VERSION),
+  'it.unimi.dsi:fastutil:{version}'.format(version = FASTUTIL_VERSION),
+  'org.jetbrains.kotlinx:kotlinx-metadata-jvm:{version}'.format(version = KOTLIN_METADATA_VERSION),
+  'org.ow2.asm:asm:{version}'.format(version = ASM_VERSION),
+  'org.ow2.asm:asm-util:{version}'.format(version = ASM_VERSION),
+  'org.ow2.asm:asm-commons:{version}'.format(version = ASM_VERSION),
+]
+
+TEST_DEPENDENCIES = [
+  'junit:junit:{version}'.format(version = JUNIT_VERSION),
+  'com.android.support:support-v4:{version}'.format(version = ANDRDID_SUPPORT_VERSION),
+  'com.android.support.test.espresso:espresso-core:{version}'.format(version = ESPRESSO_VERSION),
+  'com.android.tools.smali:smali:{version}'.format(version = SMALI_VERSION),
+  'com.google.errorprone:error_prone_core:{version}'.format(version = ERROR_PRONE_VERSION),
+  'org.javassist:javassist:{version}'.format(version = JAVASSIST_VERSION),
+  'org.jetbrains.kotlin:kotlin-stdlib:{version}'.format(version = KOTLIN_VERSION),
+  'org.jetbrains.kotlin:kotlin-reflect:{version}'.format(version = KOTLIN_VERSION),
+  'org.mockito:mockito-core:{version}'.format(version = MOCKITO_VERSION),
+  'org.testng:testng:{version}'.format(version = TESTNG_VERSION),
+]
+
+NEW_DEPENDENCIES = [
+  'org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:4.0.6',
+  'org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.8.10',
+  'org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.8.10',
+  'org.jetbrains.kotlin:kotlin-reflect:1.6.10',
+  'org.jetbrains.kotlin:kotlin-reflect:1.8.10',
+  'org.jetbrains.kotlin:kotlin-script-runtime:1.8.10',
+  'org.jetbrains.kotlin:kotlin-tooling-core:1.8.10',
+  'net.ltgt.errorprone:net.ltgt.errorprone.gradle.plugin:3.0.1'
+]
+
+def dependencies_tar(dependencies_path):
+  return os.path.join(
+      os.path.dirname(dependencies_path),
+      os.path.basename(dependencies_path) + '.tar.gz')
+
+def dependencies_tar_sha1(dependencies_path):
+  return os.path.join(
+      os.path.dirname(dependencies_path),
+      os.path.basename(dependencies_path) + '.tar.gz.sha1')
+
+def remove_local_maven_repository(dependencies_path):
+  if os.path.exists(dependencies_path):
+    shutil.rmtree(dependencies_path)
+  tar = dependencies_tar(dependencies_path)
+  if os.path.exists(tar):
+    os.remove(tar)
+  sha1 = dependencies_tar_sha1(dependencies_path)
+  if os.path.exists(sha1):
+    os.remove(sha1)
+
+def create_local_maven_repository(args, dependencies_path, repositories, dependencies):
+  with utils.ChangedWorkingDirectory(args.studio):
+    cmd = [
+        os.path.join('tools', 'base', 'bazel', 'bazel'),
+        'run',
+        '//tools/base/bazel:local_maven_repository_generator_cli',
+        '--',
+        '--repo-path',
+        dependencies_path,
+        '--fetch']
+    for repository in repositories:
+      cmd.extend(['--remote-repo', repository])
+    for dependency in dependencies:
+      cmd.append(dependency)
+    subprocess.check_call(cmd)
+
+def parse_options():
+  result = argparse.ArgumentParser(
+      description='Create local Maven repository woth dependencies')
+  result.add_argument('--studio',
+                      metavar=('<path>'),
+                      required=True,
+                      help='Path to a studio-main checkout (to get the tool '
+                          '//tools/base/bazel:local_maven_repository_generator_cli)')
+  return result.parse_args()
+
+
+def main():
+  args = parse_options()
+
+  dependencies_path = os.path.join(utils.THIRD_PARTY, 'dependencies')
+  print("Downloading to " + dependencies_path)
+  remove_local_maven_repository(dependencies_path)
+  create_local_maven_repository(
+      args, dependencies_path, REPOSITORIES, BUILD_DEPENDENCIES + TEST_DEPENDENCIES)
+
+  dependencies_new_path = os.path.join(utils.THIRD_PARTY, 'dependencies_new')
+  print("Downloading to " + dependencies_new_path)
+  remove_local_maven_repository(dependencies_new_path)
+  create_local_maven_repository(
+      args, dependencies_new_path, REPOSITORIES, NEW_DEPENDENCIES)
+
+  print('Now run')
+  print('  (cd {third_party};'
+        ' upload_to_google_storage.py -a --bucket r8-deps {dependencies};'
+        ' upload_to_google_storage.py -a --bucket r8-deps {dependencies_new})'
+      .format(
+          third_party = utils.THIRD_PARTY,
+          dependencies = 'dependencies',
+          dependencies_new = 'dependencies_new'))
+
+if __name__ == '__main__':
+  sys.exit(main())