Make :shared a non-composite project.

Change-Id: Id9442d68b9b965e03e137189ee954f4b2bf10c43
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index 2b35fe7..70ac1a4 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -239,20 +239,6 @@
   return files(project.getRoot().resolve(thirdPartyDependency.path).resolveAll(*paths))
 }
 
-/**
- * When using composite builds, referencing tasks in other projects do not give a Task but a
- * TaskReference. To get outputs from other tasks we need to have a proper task and gradle do not
- * provide a way of getting a Task from a TaskReference. We use a trick where we create a synthetic
- * task that depends on the task of interest, allowing us to look at the graph and obtain the actual
- * reference. Remove this code if gradle starts supporting this natively.
- */
-public fun Project.projectTask(project: String, taskName: String): Task {
-  val name = "$project-reference-$taskName"
-  val task =
-    tasks.register(name) { dependsOn(gradle.includedBuild(project).task(":$taskName")) }.get()
-  return task.taskDependencies.getDependencies(tasks.getByName(name)).iterator().next()
-}
-
 public fun Task.dependOnPythonScripts() {
   // There is no easy way to track transitive python dependencies, so add all python files.
   val toolsDir = project.fileTree(project.getRoot().resolve("tools"))
diff --git a/d8_r8/dist/build.gradle.kts b/d8_r8/dist/build.gradle.kts
index 98fae1d..d68bfb8 100644
--- a/d8_r8/dist/build.gradle.kts
+++ b/d8_r8/dist/build.gradle.kts
@@ -135,8 +135,18 @@
   resourceShrinkerJarScope(project(":resourceshrinker", "resourceshrinkerJar"))
 }
 
-val downloadDepsTask = projectTask("shared", "downloadDeps")
-val downloadTestDepsTask = projectTask("shared", "downloadTestDeps")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+val sharedTestDepsScope by configurations.dependencyScope("sharedTestDepsScope")
+val sharedTestDepsConfig by
+  configurations.resolvable("sharedTestDepsConfig") { extendsFrom(sharedTestDepsScope) }
+
+dependencies {
+  sharedDepsScope(project(":shared", "sharedDepsFiles"))
+  sharedTestDepsScope(project(":shared", "sharedTestDepsFiles"))
+}
 
 fun mainJarDependencies(): FileCollection {
   return project.files(
@@ -251,8 +261,8 @@
   }
 
   val consolidatedLicense by registering {
-    dependsOn(downloadDepsTask)
-    dependsOn(downloadTestDepsTask)
+    dependsOn(sharedDepsConfig)
+    dependsOn(sharedTestDepsConfig)
     val root = getRoot()
     val r8License = root.resolve("LICENSE")
     val libraryLicense = root.resolve("LIBRARY-LICENSE")
diff --git a/d8_r8/keepanno/build.gradle.kts b/d8_r8/keepanno/build.gradle.kts
index c54a693..42ad81f 100644
--- a/d8_r8/keepanno/build.gradle.kts
+++ b/d8_r8/keepanno/build.gradle.kts
@@ -56,7 +56,12 @@
   }
 }
 
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
 dependencies {
+  sharedDepsScope(project(":shared", "sharedDepsFiles"))
   compileOnly(Deps.asm)
   compileOnly(Deps.guava)
   compileOnly(Deps.protobuf)
@@ -65,7 +70,7 @@
 tasks {
   val keepAnnoAnnotationsJar by
     registering(Jar::class) {
-      dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+      dependsOn(sharedDepsConfig)
       from(sourceSets.main.get().output)
       include("com/android/tools/r8/keepanno/annotations/*")
       destinationDirectory.set(getRoot().resolveAll("build", "libs"))
@@ -74,7 +79,7 @@
 
   val keepAnnoLegacyAnnotationsJar by
     registering(Jar::class) {
-      dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+      dependsOn(sharedDepsConfig)
       from(sourceSets.main.get().output)
       include("com/android/tools/r8/keepanno/annotations/*")
       destinationDirectory.set(getRoot().resolveAll("build", "libs"))
@@ -83,14 +88,14 @@
 
   val keepAnnoAndroidXAnnotationsJar by
     registering(Jar::class) {
-      dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+      dependsOn(sharedDepsConfig)
       from(sourceSets.main.get().output)
       include("androidx/annotation/keep/*")
       destinationDirectory.set(getRoot().resolveAll("build", "libs"))
       archiveFileName.set("keepanno-annotations-androidx.jar")
     }
 
-  named<Jar>("jar") { dependsOn(gradle.includedBuild("shared").task(":downloadDeps")) }
+  named<Jar>("jar") { dependsOn(sharedDepsConfig) }
 
   val keepAnnoAnnotationsDoc by
     registering(Javadoc::class) {
@@ -122,7 +127,7 @@
 
   val depsJarExceptAsm by
     registering(Jar::class) {
-      dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+      dependsOn(sharedDepsConfig)
       from(Callable { dependenciesExceptAsm().map(::zipTree) })
       // TODO(b/428166503): Add license information.
       exclude("META-INF/*.kotlin_module")
@@ -141,7 +146,7 @@
 
   val depsJarOnlyAsm by
     registering(Jar::class) {
-      dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+      dependsOn(sharedDepsConfig)
       from(Callable { dependenciesOnlyAsm().map(::zipTree) })
       // TODO(b/428166503): Add license information if needed.
       exclude("META-INF/*.kotlin_module")
@@ -160,7 +165,7 @@
 
   val toolsJar by
     registering(Jar::class) {
-      dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+      dependsOn(sharedDepsConfig)
       from(sourceSets.main.get().output)
       // TODO(b/428166503): Add license information.
       entryCompression = ZipEntryCompression.STORED
diff --git a/d8_r8/main/build.gradle.kts b/d8_r8/main/build.gradle.kts
index 97be566..f3545d4 100644
--- a/d8_r8/main/build.gradle.kts
+++ b/d8_r8/main/build.gradle.kts
@@ -201,7 +201,11 @@
   withSourcesJar()
 }
 
-val downloadDepsTask = projectTask("shared", "downloadDeps")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+dependencies { sharedDepsScope(project(":shared", "sharedDepsFiles")) }
 
 fun mainJarDependencies(): FileCollection {
   return sourceSets.main
@@ -285,11 +289,11 @@
 }
 
 tasks.withType<JavaCompile> {
-  dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+  dependsOn(sharedDepsConfig)
   logger.info("NOTE: Running with JDK: " + org.gradle.internal.jvm.Jvm.current().javaHome)
 }
 
-tasks.withType<ProcessResources> { dependsOn(gradle.includedBuild("shared").task(":downloadDeps")) }
+tasks.withType<ProcessResources> { dependsOn(sharedDepsConfig) }
 
 // Contains both :main jar and :utils jar but not third party dependencies.
 val mainJar by configurations.consumable("mainJar") { extendsFrom(internalJarResolvable) }
diff --git a/d8_r8/resourceshrinker/build.gradle.kts b/d8_r8/resourceshrinker/build.gradle.kts
index f0bd025..093d7ef 100644
--- a/d8_r8/resourceshrinker/build.gradle.kts
+++ b/d8_r8/resourceshrinker/build.gradle.kts
@@ -44,7 +44,12 @@
     })
 }
 
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
 dependencies {
+  sharedDepsScope(project(":shared", "sharedDepsFiles"))
   compileOnly(Deps.asm)
   compileOnly(Deps.guava)
   compileOnly(Deps.protobuf)
@@ -57,7 +62,7 @@
 }
 
 tasks {
-  withType<KotlinCompile> { dependsOn(gradle.includedBuild("shared").task(":downloadDeps")) }
+  withType<KotlinCompile> { dependsOn(sharedDepsConfig) }
   val depsJar by
     registering(Jar::class) {
       from(Callable { jarDependencies().map(::zipTree) })
diff --git a/d8_r8/shared/build.gradle.kts b/d8_r8/shared/build.gradle.kts
index 8db4730..867835b 100644
--- a/d8_r8/shared/build.gradle.kts
+++ b/d8_r8/shared/build.gradle.kts
@@ -28,3 +28,33 @@
       this.setDependencies(getRoot(), allInternalTestDependencies())
     }
 }
+
+val sharedDepsFiles by
+  configurations.consumable("sharedDepsFiles") {
+    outgoing.artifacts(
+      tasks.named<DownloadAllDependenciesTask>("downloadDeps").map { it.getOutputFiles() }
+    )
+  }
+
+val sharedTestDepsFiles by
+  configurations.consumable("sharedTestDepsFiles") {
+    outgoing.artifacts(
+      tasks.named<DownloadAllDependenciesTask>("downloadTestDeps").map { it.getOutputFiles() }
+    )
+  }
+
+val sharedDepsInternalFiles by
+  configurations.consumable("sharedDepsInternalFiles") {
+    outgoing.artifacts(
+      tasks.named<DownloadAllDependenciesTask>("downloadDepsInternal").map { it.getOutputFiles() }
+    )
+  }
+
+val sharedTestDepsInternalFiles by
+  configurations.consumable("sharedTestDepsInternalFiles") {
+    outgoing.artifacts(
+      tasks.named<DownloadAllDependenciesTask>("downloadTestDepsInternal").map {
+        it.getOutputFiles()
+      }
+    )
+  }
diff --git a/d8_r8/shared/settings.gradle.kts b/d8_r8/shared/settings.gradle.kts
deleted file mode 100644
index e4a7f1a..0000000
--- a/d8_r8/shared/settings.gradle.kts
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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.
-
-pluginManagement {
-  repositories {
-    maven { url = uri("../../third_party/dependencies_plugin") }
-    maven { url = uri("../../third_party/dependencies") }
-  }
-}
-
-dependencyResolutionManagement {
-  repositories { maven { url = uri("../../third_party/dependencies") } }
-}
-
-rootProject.name = "shared"
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index da6c98f..cc4a7f0 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -63,7 +63,29 @@
     extendsFrom(resourceShrinkerSourcesScope)
   }
 
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+val sharedTestDepsScope by configurations.dependencyScope("sharedTestDepsScope")
+val sharedTestDepsConfig by
+  configurations.resolvable("sharedTestDepsConfig") { extendsFrom(sharedTestDepsScope) }
+
+val sharedDepsInternalScope by configurations.dependencyScope("sharedDepsInternalScope")
+val sharedDepsInternalConfig by
+  configurations.resolvable("sharedDepsInternalConfig") { extendsFrom(sharedDepsInternalScope) }
+
+val sharedTestDepsInternalScope by configurations.dependencyScope("sharedTestDepsInternalScope")
+val sharedTestDepsInternalConfig by
+  configurations.resolvable("sharedTestDepsInternalConfig") {
+    extendsFrom(sharedTestDepsInternalScope)
+  }
+
 dependencies {
+  sharedDepsScope(project(":shared", "sharedDepsFiles"))
+  sharedTestDepsScope(project(":shared", "sharedTestDepsFiles"))
+  sharedDepsInternalScope(project(":shared", "sharedDepsInternalFiles"))
+  sharedTestDepsInternalScope(project(":shared", "sharedTestDepsInternalFiles"))
   assistantJarScope(project(":assistant", "assistantJar"))
   blastRadiusSourcesScope(project(":blastradius", "blastradiusSources"))
   keepAnnoAndroidXAnnotationsJarScope(project(":keepanno", "keepannoAndroidXAnnotationsJar"))
@@ -594,11 +616,11 @@
     }
 
   test {
-    dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
-    dependsOn(gradle.includedBuild("shared").task(":downloadTestDeps"))
+    dependsOn(sharedDepsConfig)
+    dependsOn(sharedTestDepsConfig)
     if (!project.hasProperty("no_internal")) {
-      dependsOn(gradle.includedBuild("shared").task(":downloadDepsInternal"))
-      dependsOn(gradle.includedBuild("shared").task(":downloadTestDepsInternal"))
+      dependsOn(sharedDepsInternalConfig)
+      dependsOn(sharedTestDepsInternalConfig)
     }
     // Build processkeepruleslib.jar when running with --only_internal.
     if (project.hasProperty("only_internal")) {
diff --git a/d8_r8/test_modules/testbase/build.gradle.kts b/d8_r8/test_modules/testbase/build.gradle.kts
index 306fb88..b0d28c9 100644
--- a/d8_r8/test_modules/testbase/build.gradle.kts
+++ b/d8_r8/test_modules/testbase/build.gradle.kts
@@ -28,8 +28,18 @@
   configurations.resolvable("resourceShrinkerDepsJarConfig") {
     extendsFrom(resourceShrinkerDepsJarScope)
   }
-val sharedDownloadDepsTask = projectTask("shared", "downloadDeps")
-val sharedDownloadTestDepsTask = projectTask("shared", "downloadTestDeps")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+val sharedTestDepsScope by configurations.dependencyScope("sharedTestDepsScope")
+val sharedTestDepsConfig by
+  configurations.resolvable("sharedTestDepsConfig") { extendsFrom(sharedTestDepsScope) }
+
+dependencies {
+  sharedDepsScope(project(":shared", "sharedDepsFiles"))
+  sharedTestDepsScope(project(":shared", "sharedTestDepsFiles"))
+}
 
 dependencies {
   keepAnnoJarScope(project(":keepanno", "keepannoJar"))
@@ -74,8 +84,8 @@
 
 tasks {
   withType<JavaCompile> {
-    dependsOn(sharedDownloadDepsTask)
-    dependsOn(sharedDownloadTestDepsTask)
+    dependsOn(sharedDepsConfig)
+    dependsOn(sharedTestDepsConfig)
   }
 
   withType<JavaExec> {
@@ -100,8 +110,8 @@
     registering(Jar::class) {
       dependsOn(keepAnnoJarConfig)
       dependsOn(resourceShrinkerDepsJarConfig)
-      dependsOn(sharedDownloadDepsTask)
-      dependsOn(sharedDownloadTestDepsTask)
+      dependsOn(sharedDepsConfig)
+      dependsOn(sharedTestDepsConfig)
       from(Callable { testDependencies().map(::zipTree) })
       from(keepAnnoJarConfig.map(::zipTree))
       from(resourceShrinkerDepsJarConfig.map(::zipTree))
diff --git a/d8_r8/test_modules/tests_bootstrap/build.gradle.kts b/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
index 8a6988f..5754f3c 100644
--- a/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
+++ b/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
@@ -21,8 +21,18 @@
 
 val distR8WithRelocatedDeps = project(":dist").tasks.getByName("r8WithRelocatedDeps")
 val distSwissArmyKnife = project(":dist").tasks.getByName("swissArmyKnife")
-val sharedDownloadDepsTask = projectTask("shared", "downloadDeps")
-val sharedDownloadDepsInternalTask = projectTask("shared", "downloadDepsInternal")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+val sharedDepsInternalScope by configurations.dependencyScope("sharedDepsInternalScope")
+val sharedDepsInternalConfig by
+  configurations.resolvable("sharedDepsInternalConfig") { extendsFrom(sharedDepsInternalScope) }
+
+dependencies {
+  sharedDepsScope(project(":shared", "sharedDepsFiles"))
+  sharedDepsInternalScope(project(":shared", "sharedDepsInternalFiles"))
+}
 
 val keepAnnoClassesScope by configurations.dependencyScope("keepAnnoClassesScope")
 val keepAnnoClassesConfig by
@@ -87,9 +97,9 @@
 
   val assembleDepsJar by
     registering(Jar::class) {
-      dependsOn(sharedDownloadDepsTask)
+      dependsOn(sharedDepsConfig)
       if (!project.hasProperty("no_internal")) {
-        dependsOn(sharedDownloadDepsInternalTask)
+        dependsOn(sharedDepsInternalConfig)
       }
       from(Callable { testDependencies().map(::zipTree) })
       duplicatesStrategy = DuplicatesStrategy.EXCLUDE
diff --git a/d8_r8/test_modules/tests_java_11/build.gradle.kts b/d8_r8/test_modules/tests_java_11/build.gradle.kts
index 96f0374..11a5e38 100644
--- a/d8_r8/test_modules/tests_java_11/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_11/build.gradle.kts
@@ -14,7 +14,11 @@
   toolchain { languageVersion = JavaLanguageVersion.of(11) }
 }
 
-val sharedDownloadDepsTask = projectTask("shared", "downloadDeps")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+dependencies { sharedDepsScope(project(":shared", "sharedDepsFiles")) }
 
 dependencies {
   implementation(project(":main", "mainClassesOutput"))
@@ -25,7 +29,7 @@
 }
 
 tasks {
-  withType<JavaCompile> { dependsOn(sharedDownloadDepsTask) }
+  withType<JavaCompile> { dependsOn(sharedDepsConfig) }
 
   withType<Test> {
     notCompatibleWithConfigurationCache(
diff --git a/d8_r8/test_modules/tests_java_17/build.gradle.kts b/d8_r8/test_modules/tests_java_17/build.gradle.kts
index cdc6282..713e826 100644
--- a/d8_r8/test_modules/tests_java_17/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_17/build.gradle.kts
@@ -17,7 +17,11 @@
   toolchain { languageVersion = JavaLanguageVersion.of(17) }
 }
 
-val sharedDownloadDepsTask = projectTask("shared", "downloadDeps")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+dependencies { sharedDepsScope(project(":shared", "sharedDepsFiles")) }
 
 dependencies {
   implementation(project(":main", "mainClassesOutput"))
@@ -28,7 +32,7 @@
 }
 
 tasks {
-  withType<JavaCompile> { dependsOn(sharedDownloadDepsTask) }
+  withType<JavaCompile> { dependsOn(sharedDepsConfig) }
 
   withType<Test> {
     notCompatibleWithConfigurationCache(
diff --git a/d8_r8/test_modules/tests_java_21/build.gradle.kts b/d8_r8/test_modules/tests_java_21/build.gradle.kts
index 845a461..57d983c 100644
--- a/d8_r8/test_modules/tests_java_21/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_21/build.gradle.kts
@@ -17,7 +17,12 @@
 val assistantClassesScope by configurations.dependencyScope("assistantClassesScope")
 val assistantClassesOutput =
   configurations.resolvable("assistantClassesOutput") { extendsFrom(assistantClassesScope) }
-val sharedDownloadDepsTask = projectTask("shared", "downloadDeps")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+dependencies { sharedDepsScope(project(":shared", "sharedDepsFiles")) }
+
 val mainClassesScope by configurations.dependencyScope("mainClassesScope")
 val mainClassesOutput =
   configurations.resolvable("mainClassesOutput") { extendsFrom(mainClassesScope) }
@@ -41,7 +46,7 @@
 }
 
 tasks {
-  withType<JavaCompile> { dependsOn(sharedDownloadDepsTask) }
+  withType<JavaCompile> { dependsOn(sharedDepsConfig) }
 
   withType<Test> {
     notCompatibleWithConfigurationCache(
diff --git a/d8_r8/test_modules/tests_java_25/build.gradle.kts b/d8_r8/test_modules/tests_java_25/build.gradle.kts
index f72e710..0e0c919 100644
--- a/d8_r8/test_modules/tests_java_25/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_25/build.gradle.kts
@@ -14,7 +14,11 @@
   toolchain { languageVersion = JavaLanguageVersion.of(25) }
 }
 
-val sharedDownloadDepsTask = projectTask("shared", "downloadDeps")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+dependencies { sharedDepsScope(project(":shared", "sharedDepsFiles")) }
 
 dependencies {
   implementation(project(":main", "mainClassesOutput"))
@@ -26,7 +30,7 @@
 
 tasks {
   withType<JavaCompile> {
-    dependsOn(sharedDownloadDepsTask)
+    dependsOn(sharedDepsConfig)
     options.compilerArgs.add("--enable-preview")
   }
 
diff --git a/d8_r8/test_modules/tests_java_8/build.gradle.kts b/d8_r8/test_modules/tests_java_8/build.gradle.kts
index e09333f..5effe2f 100644
--- a/d8_r8/test_modules/tests_java_8/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/build.gradle.kts
@@ -49,8 +49,18 @@
 val turboClassesScope by configurations.dependencyScope("turboClassesScope")
 val turboClassesOutput =
   configurations.resolvable("turboClassesOutput") { extendsFrom(turboClassesScope) }
-val sharedDownloadDepsTask = projectTask("shared", "downloadDeps")
-val sharedDownloadDepsInternalTask = projectTask("shared", "downloadDepsInternal")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+val sharedDepsInternalScope by configurations.dependencyScope("sharedDepsInternalScope")
+val sharedDepsInternalConfig by
+  configurations.resolvable("sharedDepsInternalConfig") { extendsFrom(sharedDepsInternalScope) }
+
+dependencies {
+  sharedDepsScope(project(":shared", "sharedDepsFiles"))
+  sharedDepsInternalScope(project(":shared", "sharedDepsInternalFiles"))
+}
 
 dependencies {
   keepAnnoClassesScope(project(":keepanno", "keepannoClasses"))
@@ -92,7 +102,7 @@
 
   val createArtTests by
     registering(Exec::class) {
-      dependsOn(sharedDownloadDepsTask)
+      dependsOn(sharedDepsConfig)
       dependOnPythonScripts()
       // TODO(b/327315907): Don't generating into the root build dir.
       val outputDir =
@@ -105,12 +115,12 @@
       commandLine("python3", createArtTestsScript)
     }
   "compileTestJava" {
-    dependsOn(sharedDownloadDepsTask)
+    dependsOn(sharedDepsConfig)
     dependsOn(":testbase:compileJava")
   }
   withType<JavaCompile> {
     dependsOn(createArtTests)
-    dependsOn(sharedDownloadDepsTask)
+    dependsOn(sharedDepsConfig)
     dependsOn(":testbase:compileJava")
   }
 
@@ -129,9 +139,9 @@
   withType<Test> {
     TestingState.setUpTestingState(this)
     dependsOn(distDepsFiles)
-    dependsOn(sharedDownloadDepsTask)
+    dependsOn(sharedDepsConfig)
     if (!project.hasProperty("no_internal")) {
-      dependsOn(sharedDownloadDepsInternalTask)
+      dependsOn(sharedDepsInternalConfig)
     }
     dependsOn(sourceSetDependencyTask)
     systemProperty(
diff --git a/d8_r8/test_modules/tests_java_9/build.gradle.kts b/d8_r8/test_modules/tests_java_9/build.gradle.kts
index a4c6f3d..2be3163 100644
--- a/d8_r8/test_modules/tests_java_9/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_9/build.gradle.kts
@@ -18,7 +18,11 @@
   toolchain { languageVersion = JavaLanguageVersion.of(JvmCompatibility.release) }
 }
 
-val sharedDownloadDepsTask = projectTask("shared", "downloadDeps")
+val sharedDepsScope by configurations.dependencyScope("sharedDepsScope")
+val sharedDepsConfig by
+  configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope) }
+
+dependencies { sharedDepsScope(project(":shared", "sharedDepsFiles")) }
 
 dependencies {
   implementation(project(":main", "mainClassesOutput"))
@@ -32,7 +36,7 @@
 val buildExampleJars = buildExampleJars("examplesJava9")
 
 tasks {
-  withType<JavaCompile> { dependsOn(sharedDownloadDepsTask) }
+  withType<JavaCompile> { dependsOn(sharedDepsConfig) }
 
   withType<Test> {
     notCompatibleWithConfigurationCache(
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 63797c6..e748e42 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -16,7 +16,9 @@
 
 dependencyResolutionManagement { repositories { maven { url = uri("third_party/dependencies") } } }
 
-includeBuild(rootProject.projectDir.resolve("d8_r8/shared"))
+include(":shared")
+
+project(":shared").projectDir = file("d8_r8/shared")
 
 include(":assistant")