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 c49a365..e60cb6a 100644
--- a/d8_r8/test_modules/tests_java_8/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/build.gradle.kts
@@ -80,9 +80,15 @@
   implementation(project(":resourceshrinker", "resourceshrinkerDepsJar"))
   implementation(project(":testbase"))
   implementation(project(":testbase", "depsJar"))
+  runtimeOnlyData(project(":third_party", "bundletool"))
   runtimeOnlyData(project(":third_party", "gson"))
   runtimeOnlyData(project(":third_party", "guavaJre"))
+  runtimeOnlyData(project(":third_party", "jacoco"))
   runtimeOnlyData(project(":third_party", "jdwpTests"))
+  runtimeOnlyData(project(":third_party", "jsr223"))
+  runtimeOnlyData(project(":third_party", "processKeepRulesBinaryCompatibility"))
+  runtimeOnlyData(project(":third_party", "rhino"))
+  runtimeOnlyData(project(":third_party", "rhinoAndroid"))
   runtimeOnlyData(project(":testbase", "runtimeOnlyDataElements"))
   // For each child project, add its test classes to the test class configuration.
   childProjects.values.forEach { childProject ->
diff --git a/d8_r8/test_modules/tests_java_8/desugar/build.gradle.kts b/d8_r8/test_modules/tests_java_8/desugar/build.gradle.kts
index c6d50b0..19d2b4f 100644
--- a/d8_r8/test_modules/tests_java_8/desugar/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/desugar/build.gradle.kts
@@ -24,4 +24,6 @@
   runtimeOnlyData(project(":third_party", "coreLambdaStubs"))
   runtimeOnlyData(project(":third_party", "gson"))
   runtimeOnlyData(project(":third_party", "guavaJre"))
+  runtimeOnlyData(project(":third_party", "jacoco"))
+  runtimeOnlyData(project(":third_party", "multidex"))
 }
diff --git a/d8_r8/test_modules/tests_java_8/retrace/build.gradle.kts b/d8_r8/test_modules/tests_java_8/retrace/build.gradle.kts
index fa65957..b3b9dd8 100644
--- a/d8_r8/test_modules/tests_java_8/retrace/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/retrace/build.gradle.kts
@@ -22,3 +22,9 @@
     }
   }
 }
+
+dependencies {
+  runtimeOnlyData(project(":third_party", "r8Mappings"))
+  runtimeOnlyData(project(":third_party", "retraceBinaryCompatibility"))
+  runtimeOnlyData(project(":third_party", "retracePartitionFormats"))
+}
diff --git a/d8_r8/third_party/build.gradle.kts b/d8_r8/third_party/build.gradle.kts
index 586290b..9df3088 100644
--- a/d8_r8/third_party/build.gradle.kts
+++ b/d8_r8/third_party/build.gradle.kts
@@ -57,14 +57,46 @@
 // This should be called 'dependencies' but that is reserved in gradle, so dependenciesBucket.
 registerTestDep("dependenciesBucket", getRoot().resolve("third_party/dependencies"), "DEPENDENCIES")
 
+registerTestDep("bundletool", ThirdPartyDeps.bundletool, "BUNDLETOOL")
+
 registerTestDep("coreLambdaStubs", ThirdPartyDeps.coreLambdaStubs, "CORE_LAMBDA_STUBS")
 
 registerTestDep("gson", ThirdPartyDeps.gson, "GSON")
 
 registerTestDep("guavaJre", ThirdPartyDeps.guavaJre, "GUAVA_JRE")
 
+registerTestDep("jacoco", ThirdPartyDeps.jacoco, "JACOCO")
+
 registerTestDep("jdwpTests", ThirdPartyDeps.jdwpTests, "JDWP_TESTS")
 
+registerTestDep("jsr223", ThirdPartyDeps.jsr223, "JSR223")
+
+registerTestDep("multidex", ThirdPartyDeps.multidex, "MULTIDEX")
+
+registerTestDep(
+  "processKeepRulesBinaryCompatibility",
+  ThirdPartyDeps.processKeepRulesBinaryCompatibility,
+  "PROCESS_KEEP_RULES_BINARY_COMPATIBILITY",
+)
+
+registerTestDep("r8Mappings", ThirdPartyDeps.r8Mappings, "R8_MAPPINGS")
+
+registerTestDep(
+  "retraceBinaryCompatibility",
+  ThirdPartyDeps.retraceBinaryCompatibility,
+  "RETRACE_BINARY_COMPATIBILITY",
+)
+
+registerTestDep(
+  "retracePartitionFormats",
+  ThirdPartyDeps.retracePartitionFormats,
+  "RETRACE_PARTITION_FORMATS",
+)
+
+registerTestDep("rhino", ThirdPartyDeps.rhino, "RHINO")
+
+registerTestDep("rhinoAndroid", ThirdPartyDeps.rhinoAndroid, "RHINO_ANDROID")
+
 val internalTasks =
   if (!providers.gradleProperty("no_internal").isPresent) {
     allInternalDependencies().map { registerDependency(it) }
diff --git a/src/test/java/com/android/tools/r8/JacocoRegressionTest.java b/src/test/java/com/android/tools/r8/JacocoRegressionTest.java
index a7421e8..7beaa04 100644
--- a/src/test/java/com/android/tools/r8/JacocoRegressionTest.java
+++ b/src/test/java/com/android/tools/r8/JacocoRegressionTest.java
@@ -42,7 +42,7 @@
             path,
             String.format(
                 "-javaagent:%s=destfile=%s,dumponexit=true,output=file",
-                ToolHelper.JACOCO_AGENT, agentOutput),
+                TestDeps.getJacocoAgentJar(), agentOutput),
             name);
     assertEquals(1, result1.exitCode);
     assertTrue(result1.toString().contains("java.lang.VerifyError: Bad local variable type"));
diff --git a/src/test/java/com/android/tools/r8/androidresources/FeatureSplitCodeLessManifestTest.java b/src/test/java/com/android/tools/r8/androidresources/FeatureSplitCodeLessManifestTest.java
index d932e18..d59aa8a 100644
--- a/src/test/java/com/android/tools/r8/androidresources/FeatureSplitCodeLessManifestTest.java
+++ b/src/test/java/com/android/tools/r8/androidresources/FeatureSplitCodeLessManifestTest.java
@@ -13,6 +13,7 @@
 import com.android.aapt.Resources.XmlNode;
 import com.android.tools.r8.R8TestCompileResultBase;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
@@ -25,7 +26,6 @@
 import java.net.URLClassLoader;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import org.junit.Assume;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -336,12 +336,7 @@
 
   private static void validateWithBundletool(XmlNode xmlNode, boolean expectedHasCode)
       throws Exception {
-    Path bundletoolJar =
-        Paths.get(
-            ToolHelper.THIRD_PARTY_DIR,
-            "bundletool",
-            "bundletool-1.11.0",
-            "bundletool-all-1.11.0.jar");
+    Path bundletoolJar = TestDeps.getBundleToolJar();
     assertTrue(Files.exists(bundletoolJar));
     try (URLClassLoader loader =
         new URLClassLoader(
diff --git a/src/test/java/com/android/tools/r8/assistant/ReflectiveCallExtractorTest.java b/src/test/java/com/android/tools/r8/assistant/ReflectiveCallExtractorTest.java
index b922cf9..853df28 100644
--- a/src/test/java/com/android/tools/r8/assistant/ReflectiveCallExtractorTest.java
+++ b/src/test/java/com/android/tools/r8/assistant/ReflectiveCallExtractorTest.java
@@ -51,7 +51,7 @@
 
   @Test
   public void testJacoco() throws Exception {
-    test(ToolHelper.JACOCO_AGENT, 12, 0);
+    test(TestDeps.getJacocoAgentJar(), 12, 0);
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/processkeeprules/api/ProcessKeepRulesApiTestCollection.java b/src/test/java/com/android/tools/r8/processkeeprules/api/ProcessKeepRulesApiTestCollection.java
index 749b548..d9cab20 100644
--- a/src/test/java/com/android/tools/r8/processkeeprules/api/ProcessKeepRulesApiTestCollection.java
+++ b/src/test/java/com/android/tools/r8/processkeeprules/api/ProcessKeepRulesApiTestCollection.java
@@ -3,21 +3,17 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.processkeeprules.api;
 
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.compilerapi.BinaryCompatibilityTestCollection;
 import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.List;
 import org.junit.rules.TemporaryFolder;
 
 public class ProcessKeepRulesApiTestCollection
     extends BinaryCompatibilityTestCollection<ProcessKeepRulesApiBinaryTest> {
 
-  private static final Path BINARY_COMPATIBILITY_JAR =
-      Paths.get(
-          ToolHelper.THIRD_PARTY_DIR, "processkeeprules", "binary_compatibility", "tests.jar");
-
   public static List<Class<? extends ProcessKeepRulesApiBinaryTest>>
       CLASSES_FOR_BINARY_COMPATIBILITY = ImmutableList.of(ProcessKeepRulesTest.ApiTest.class);
 
@@ -42,7 +38,7 @@
 
   @Override
   public Path getCheckedInTestJar() {
-    return BINARY_COMPATIBILITY_JAR;
+    return TestDeps.getProcessKeepRulesBinaryCompatibilityJar();
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTestBase.java b/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTestBase.java
index 5e411be..b01ddf1 100644
--- a/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTestBase.java
+++ b/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTestBase.java
@@ -7,20 +7,19 @@
 import com.android.tools.r8.R8TestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestBuilder;
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.TestShrinkerBuilder;
-import com.android.tools.r8.ToolHelper;
-import java.nio.file.Paths;
 
 public class ScriptEngineTestBase extends TestBase {
   public void addRhinoForAndroid(TestBuilder<?, ?> builder) {
     builder
         // JSR 223: Scripting for the JavaTM Platform (https://jcp.org/en/jsr/detail?id=223).
-        .addProgramFiles(Paths.get(ToolHelper.JSR223_RI_JAR))
+        .addProgramFiles(TestDeps.getJsr223RiJar())
         // The Rhino implementation.
-        .addProgramFiles(Paths.get(ToolHelper.RHINO_JAR))
+        .addProgramFiles(TestDeps.getRhinoJar())
         // The rhino-android contains concrete implementation of sun.misc.Service
         // used by the JSR 223 RI, which is not in the Android runtime (except for N?).
-        .addProgramFiles(Paths.get(ToolHelper.RHINO_ANDROID_JAR));
+        .addProgramFiles(TestDeps.getRhinoAndroidJar());
     if (builder instanceof TestShrinkerBuilder) {
       ((TestShrinkerBuilder<?, ?, ?, ?, ?>) builder)
           // The rhino-android library have references to missing classes.
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionsConfigurationJacocoTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionsConfigurationJacocoTest.java
index 5be0654..d012196 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionsConfigurationJacocoTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/AssertionsConfigurationJacocoTest.java
@@ -8,6 +8,7 @@
 
 import com.android.tools.r8.AssertionsConfiguration;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime;
@@ -99,7 +100,7 @@
     List<String> cmdline = new ArrayList<>();
     cmdline.add(TestRuntime.getSystemRuntime().asCf().getJavaExecutable().toString());
     cmdline.add("-jar");
-    cmdline.add(ToolHelper.JACOCO_CLI.toString());
+    cmdline.add(TestDeps.getJacocoCliJar().toString());
     cmdline.add("instrument");
     cmdline.add(input.toString());
     cmdline.add("--dest");
diff --git a/src/test/java8/desugar/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java b/src/test/java8/desugar/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java
index 1386ef8..0d2abbb 100644
--- a/src/test/java8/desugar/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java
+++ b/src/test/java8/desugar/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicGetDeclaredMethods.java
@@ -10,10 +10,10 @@
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.TestRuntime.CfVm;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.cf.CfVersion;
@@ -92,7 +92,7 @@
     Path agentOutputOnTheFly = output.resolve("on-the-fly");
     testForJvm(parameters)
         .addProgramFiles(testClasses.getOriginal())
-        .enableJaCoCoAgent(ToolHelper.JACOCO_AGENT, agentOutputOnTheFly)
+        .enableJaCoCoAgent(TestDeps.getJacocoAgentJar(), agentOutputOnTheFly)
         .run(parameters.getRuntime(), MAIN_CLASS)
         .assertSuccessWithOutput(EXPECTED_OUTPUT_WITH_METHOD_HANDLES);
     checkJacocoReport(agentOutputOnTheFly);
@@ -101,7 +101,8 @@
     Path agentOutputOffline = output.resolve("offline");
     testForJvm(parameters)
         .addProgramFiles(testClasses.getInstrumented())
-        .configureJaCoCoAgentForOfflineInstrumentedCode(ToolHelper.JACOCO_AGENT, agentOutputOffline)
+        .configureJaCoCoAgentForOfflineInstrumentedCode(
+            TestDeps.getJacocoAgentJar(), agentOutputOffline)
         .run(parameters.getRuntime(), MAIN_CLASS)
         .assertSuccessWithOutput(EXPECTED_OUTPUT_WITH_METHOD_HANDLES);
     checkJacocoReport(agentOutputOffline);
@@ -113,7 +114,7 @@
     Path agentOutput = temp.newFolder().toPath().resolve("jacoco.exec");
     testForD8(parameters.getBackend())
         .addProgramFiles(testClasses.getInstrumented())
-        .addProgramFiles(ToolHelper.JACOCO_AGENT)
+        .addProgramFiles(TestDeps.getJacocoAgentJar())
         .setMinApi(parameters)
         .compile()
         .runWithJaCoCo(agentOutput, parameters.getRuntime(), MAIN_CLASS)
@@ -130,7 +131,7 @@
     Path agentOutput = temp.newFolder().toPath().resolve("jacoco.exec");
     testForR8(parameters.getBackend())
         .addProgramFiles(testClasses.getInstrumented())
-        .addProgramFiles(ToolHelper.JACOCO_AGENT)
+        .addProgramFiles(TestDeps.getJacocoAgentJar())
         .setMinApi(parameters)
         .addKeepMainRules(TestRunner.class)
         .addKeepRules(
@@ -162,7 +163,7 @@
     Path agentOutput = temp.newFolder().toPath().resolve("jacoco.exec");
     testForR8(parameters.getBackend())
         .addProgramFiles(testClasses.getInstrumented())
-        .addProgramFiles(ToolHelper.JACOCO_AGENT)
+        .addProgramFiles(TestDeps.getJacocoAgentJar())
         .setMinApi(parameters)
         .addKeepMainRules(TestRunner.class)
         .addKeepRules("-keep class ** { *** " + jacocoBootstrapMethodName + "(...); }")
diff --git a/src/test/java8/desugar/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicTest.java b/src/test/java8/desugar/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicTest.java
index 9c9aa98..2cff554 100644
--- a/src/test/java8/desugar/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicTest.java
+++ b/src/test/java8/desugar/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicTest.java
@@ -8,9 +8,9 @@
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime.CfVm;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm;
 import com.android.tools.r8.cf.CfVersion;
 import com.android.tools.r8.jacoco.JacocoClasses;
@@ -82,7 +82,7 @@
     Path agentOutputOnTheFly = output.resolve("on-the-fly");
     testForJvm(parameters)
         .addProgramFiles(testClasses.getOriginal())
-        .enableJaCoCoAgent(ToolHelper.JACOCO_AGENT, agentOutputOnTheFly)
+        .enableJaCoCoAgent(TestDeps.getJacocoAgentJar(), agentOutputOnTheFly)
         .run(parameters.getRuntime(), MAIN_CLASS)
         .assertSuccessWithOutput(EXPECTED_OUTPUT);
     List<String> onTheFlyReport = testClasses.generateReport(agentOutputOnTheFly);
@@ -92,7 +92,8 @@
     Path agentOutputOffline = output.resolve("offline");
     testForJvm(parameters)
         .addProgramFiles(testClasses.getInstrumented())
-        .configureJaCoCoAgentForOfflineInstrumentedCode(ToolHelper.JACOCO_AGENT, agentOutputOffline)
+        .configureJaCoCoAgentForOfflineInstrumentedCode(
+            TestDeps.getJacocoAgentJar(), agentOutputOffline)
         .run(parameters.getRuntime(), MAIN_CLASS)
         .assertSuccessWithOutput(EXPECTED_OUTPUT);
     List<String> offlineReport = testClasses.generateReport(agentOutputOffline);
@@ -107,7 +108,7 @@
       Path agentOutput = output.resolve("jacoco.exec");
       testForD8()
           .addProgramFiles(testClasses.getInstrumented())
-          .addProgramFiles(ToolHelper.JACOCO_AGENT)
+          .addProgramFiles(TestDeps.getJacocoAgentJar())
           .setMinApi(parameters)
           .compile()
           .runWithJaCoCo(agentOutput, parameters.getRuntime(), MAIN_CLASS)
@@ -122,7 +123,7 @@
     } else {
       testForD8()
           .addProgramFiles(testClasses.getInstrumented())
-          .addProgramFiles(ToolHelper.JACOCO_AGENT)
+          .addProgramFiles(TestDeps.getJacocoAgentJar())
           .setMinApi(parameters)
           .compile();
     }
diff --git a/src/test/java8/desugar/com/android/tools/r8/desugar/desugaredlibrary/MultiDexTest.java b/src/test/java8/desugar/com/android/tools/r8/desugar/desugaredlibrary/MultiDexTest.java
index f5d5449..c681216 100644
--- a/src/test/java8/desugar/com/android/tools/r8/desugar/desugaredlibrary/MultiDexTest.java
+++ b/src/test/java8/desugar/com/android/tools/r8/desugar/desugaredlibrary/MultiDexTest.java
@@ -10,8 +10,8 @@
 import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK8;
 import static org.junit.Assert.assertFalse;
 
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
 import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
 import com.android.tools.r8.graph.DexField;
@@ -22,10 +22,7 @@
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
 import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Arrays;
 import java.util.List;
-import java.util.stream.Collectors;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -34,18 +31,6 @@
 @RunWith(Parameterized.class)
 public class MultiDexTest extends DesugaredLibraryTestBase {
 
-  private static final String[] JAR_NAMES =
-      new String[] {
-        "multidex-1.0.3.jar",
-        "multidex-instrumentation-1.0.3.jar",
-        "multidex-2.0.1.jar",
-        "multidex-instrumentation-2.0.0.jar"
-      };
-  private static final List<Path> MULTIDEX_JARS =
-      Arrays.stream(JAR_NAMES)
-          .map(jar -> Paths.get(ToolHelper.THIRD_PARTY_DIR + "multidex/" + jar))
-          .collect(Collectors.toList());
-
   private final TestParameters parameters;
   private final CompilationSpecification compilationSpecification;
   private final LibraryDesugaringSpecification libraryDesugaringSpecification;
@@ -57,7 +42,11 @@
         getTestParameters().withDexRuntimes().withAllApiLevels().build(),
         ImmutableList.of(JDK8, JDK11, JDK11_PATH),
         ImmutableList.of(D8_L8DEBUG),
-        MULTIDEX_JARS);
+        ImmutableList.of(
+            TestDeps.getMultidex1_0_3Jar(),
+            TestDeps.getMultidexInstrumentation1_0_3Jar(),
+            TestDeps.getMultidex2_0_1Jar(),
+            TestDeps.getMultidexInstrumentation2_0_0Jar()));
   }
 
   public MultiDexTest(
diff --git a/src/test/java8/retrace/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java b/src/test/java8/retrace/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java
index ccee173..580bd29 100644
--- a/src/test/java8/retrace/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java
+++ b/src/test/java8/retrace/com/android/tools/r8/retrace/api/RetraceApiTestCollection.java
@@ -4,20 +4,17 @@
 
 package com.android.tools.r8.retrace.api;
 
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.compilerapi.BinaryCompatibilityTestCollection;
 import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.List;
 import org.junit.rules.TemporaryFolder;
 
 public class RetraceApiTestCollection
     extends BinaryCompatibilityTestCollection<RetraceApiBinaryTest> {
 
-  private static final Path BINARY_COMPATIBILITY_JAR =
-      Paths.get(ToolHelper.THIRD_PARTY_DIR, "retrace", "binary_compatibility", "tests.jar");
-
   public static List<Class<? extends RetraceApiBinaryTest>> CLASSES_FOR_BINARY_COMPATIBILITY =
       ImmutableList.of(
           RetraceApiEmptyTest.RetraceTest.class,
@@ -68,7 +65,7 @@
 
   @Override
   public Path getCheckedInTestJar() {
-    return BINARY_COMPATIBILITY_JAR;
+    return TestDeps.getRetraceBinaryCompatibilityJar();
   }
 
   @Override
diff --git a/src/test/java8/retrace/com/android/tools/r8/retrace/partition/RetracePartitionAndJoinIdentityTest.java b/src/test/java8/retrace/com/android/tools/r8/retrace/partition/RetracePartitionAndJoinIdentityTest.java
index e8c953e..d75903d 100644
--- a/src/test/java8/retrace/com/android/tools/r8/retrace/partition/RetracePartitionAndJoinIdentityTest.java
+++ b/src/test/java8/retrace/com/android/tools/r8/retrace/partition/RetracePartitionAndJoinIdentityTest.java
@@ -7,10 +7,10 @@
 import static org.junit.Assert.assertNotNull;
 
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.TestDiagnosticMessagesImpl;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.retrace.MappingPartitionMetadata;
 import com.android.tools.r8.retrace.PartitionMappingSupplier;
 import com.android.tools.r8.retrace.PartitionedToProguardMappingConverter;
@@ -43,8 +43,7 @@
   @Test
   public void testPartitionAndJoin() throws Exception {
     Path mappingFile =
-        ToolHelper.RETRACE_MAPS_DIR.resolve(
-            "ad5c3e88ef2bae5ef324eb225fbc57345cd57863-r8lib.jar.map");
+        TestDeps.getR8MappingsPath("ad5c3e88ef2bae5ef324eb225fbc57345cd57863-r8lib.jar.map");
     ProguardMapProducer proguardMapProducer = ProguardMapProducer.fromPath(mappingFile);
     TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
     Map<String, byte[]> partitions = new HashMap<>();
diff --git a/src/test/java8/retrace/com/android/tools/r8/retrace/partition/RetracePartitionFormatsTest.java b/src/test/java8/retrace/com/android/tools/r8/retrace/partition/RetracePartitionFormatsTest.java
index f0a7412..6ee0a7b 100644
--- a/src/test/java8/retrace/com/android/tools/r8/retrace/partition/RetracePartitionFormatsTest.java
+++ b/src/test/java8/retrace/com/android/tools/r8/retrace/partition/RetracePartitionFormatsTest.java
@@ -10,6 +10,7 @@
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestDeps;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.ToolHelper;
@@ -23,7 +24,6 @@
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.function.Consumer;
@@ -50,10 +50,6 @@
     this.directory = directory;
   }
 
-  private static Path getPartitionDataRoot() {
-    return Paths.get(ToolHelper.THIRD_PARTY_DIR, "retrace", "partition_formats");
-  }
-
   private static Path getRetracedStacktracePath(Path directory) {
     return directory.resolve("retraced-stacktrace.txt");
   }
@@ -67,7 +63,7 @@
   }
 
   private Path getDirectoryPath() {
-    return getPartitionDataRoot().resolve(directory);
+    return TestDeps.getRetracePartitionFormatsDir().resolve(directory);
   }
 
   @Test
@@ -113,7 +109,7 @@
 
     LocalDate now = LocalDate.now();
     String datePrefix = "" + now.getYear() + now.getMonthValue() + now.getDayOfMonth();
-    Path directory = getPartitionDataRoot().resolve(datePrefix);
+    Path directory = TestDeps.getRetracePartitionFormatsDir().resolve(datePrefix);
     Path mapping = getPartitionedMapPath(directory);
     Path rawStacktrace = getRawStacktracePath(directory);
     Path retracedStacktrace = getRetracedStacktracePath(directory);
@@ -147,7 +143,7 @@
     System.out.println("Remember to upload changes to cloud storage:");
     System.out.println(
         "(cd "
-            + getPartitionDataRoot().getParent()
+            + TestDeps.getRetracePartitionFormatsDir().getParent()
             + "; upload_to_google_storage.py -a --bucket r8-deps partition_formats)");
     System.out.println("==========================");
   }
diff --git a/src/test/java8/retrace/com/android/tools/r8/retrace/stacktraces/ActualBotStackTraceBase.java b/src/test/java8/retrace/com/android/tools/r8/retrace/stacktraces/ActualBotStackTraceBase.java
index b1b8e8b..30ac439 100644
--- a/src/test/java8/retrace/com/android/tools/r8/retrace/stacktraces/ActualBotStackTraceBase.java
+++ b/src/test/java8/retrace/com/android/tools/r8/retrace/stacktraces/ActualBotStackTraceBase.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace.stacktraces;
 
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.TestDeps;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -12,7 +12,7 @@
 public abstract class ActualBotStackTraceBase implements StackTraceForTest {
 
   public String r8MappingFromGitSha(String sha) {
-    Path resolve = ToolHelper.RETRACE_MAPS_DIR.resolve(sha + "-r8lib.jar.map");
+    Path resolve = TestDeps.getR8MappingsPath(sha + "-r8lib.jar.map");
     try {
       return new String(Files.readAllBytes(resolve));
     } catch (IOException e) {
diff --git a/src/test/testbase/java/com/android/tools/r8/TestDeps.java b/src/test/testbase/java/com/android/tools/r8/TestDeps.java
index 4375e58..14a7a9d 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestDeps.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestDeps.java
@@ -40,17 +40,31 @@
   static {
     // This list is serves as a list of required properties to match in Gradle.
     dependencies = new HashMap<>();
+    dependencies.put("BUNDLETOOL", null);
     dependencies.put("CORE_LAMBDA_STUBS", null);
     dependencies.put("DEPENDENCIES", null);
     dependencies.put("GSON", null);
     dependencies.put("GUAVA_JRE", null);
+    dependencies.put("JACOCO", null);
     dependencies.put("JDWP_TESTS", null);
+    dependencies.put("JSR223", null);
+    dependencies.put("MULTIDEX", null);
+    dependencies.put("PROCESS_KEEP_RULES_BINARY_COMPATIBILITY", null);
+    dependencies.put("R8_MAPPINGS", null);
+    dependencies.put("RETRACE_BINARY_COMPATIBILITY", null);
+    dependencies.put("RETRACE_PARTITION_FORMATS", null);
+    dependencies.put("RHINO", null);
+    dependencies.put("RHINO_ANDROID", null);
   }
 
   private static Path getDependency(String key) {
     return dependencies.computeIfAbsent(key, TestDeps::getTestDependency);
   }
 
+  public static Path getBundleToolJar() {
+    return getDependencyPath("BUNDLETOOL", "bundletool-all-1.11.0.jar");
+  }
+
   public static Path getCoreLambdaStubsJar() {
     return getDependencyPath("CORE_LAMBDA_STUBS", "core-lambda-stubs.jar");
   }
@@ -67,6 +81,62 @@
     return getDependencyPath("GUAVA_JRE", "guava-32.1.2-jre.jar");
   }
 
+  public static Path getJacocoAgentJar() {
+    return getDependencyPath("JACOCO", "lib", "jacocoagent.jar");
+  }
+
+  public static Path getJacocoCliJar() {
+    return getDependencyPath("JACOCO", "lib", "jacococli.jar");
+  }
+
+  public static Path getJsr223RiJar() {
+    return getDependencyPath("JSR223", "jsr223-api-1.0.jar");
+  }
+
+  public static Path getMultidex1_0_3Jar() {
+    return getDependencyPath("MULTIDEX", "multidex-1.0.3.jar");
+  }
+
+  public static Path getMultidexInstrumentation1_0_3Jar() {
+    return getDependencyPath("MULTIDEX", "multidex-instrumentation-1.0.3.jar");
+  }
+
+  public static Path getMultidex2_0_1Jar() {
+    return getDependencyPath("MULTIDEX", "multidex-2.0.1.jar");
+  }
+
+  public static Path getMultidexInstrumentation2_0_0Jar() {
+    return getDependencyPath("MULTIDEX", "multidex-instrumentation-2.0.0.jar");
+  }
+
+  public static Path getProcessKeepRulesBinaryCompatibilityJar() {
+    return getDependencyPath("PROCESS_KEEP_RULES_BINARY_COMPATIBILITY", "tests.jar");
+  }
+
+  public static Path getR8MappingsDir() {
+    return getDependency("R8_MAPPINGS");
+  }
+
+  public static Path getR8MappingsPath(String... path) {
+    return getDependencyPath("R8_MAPPINGS", path);
+  }
+
+  public static Path getRetraceBinaryCompatibilityJar() {
+    return getDependencyPath("RETRACE_BINARY_COMPATIBILITY", "tests.jar");
+  }
+
+  public static Path getRetracePartitionFormatsDir() {
+    return getDependency("RETRACE_PARTITION_FORMATS");
+  }
+
+  public static Path getRhinoJar() {
+    return getDependencyPath("RHINO", "rhino-1.7.10.jar");
+  }
+
+  public static Path getRhinoAndroidJar() {
+    return getDependencyPath("RHINO_ANDROID", "rhino-android-1.1.1.jar");
+  }
+
   public static Path getJunitJar() {
     return getDependencyPath("DEPENDENCIES", "junit", "junit", "4.13.2", "junit-4.13.2.jar");
   }
diff --git a/src/test/testbase/java/com/android/tools/r8/ToolHelper.java b/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
index 447fa5e..98d70f4 100644
--- a/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
@@ -233,10 +233,6 @@
 
   public static final String CORE_LAMBDA_STUBS =
       THIRD_PARTY_DIR + "core-lambda-stubs/core-lambda-stubs.jar";
-  public static final String JSR223_RI_JAR = THIRD_PARTY_DIR + "jsr223-api-1.0/jsr223-api-1.0.jar";
-  public static final String RHINO_ANDROID_JAR =
-      THIRD_PARTY_DIR + "rhino-android-1.1.1/rhino-android-1.1.1.jar";
-  public static final String RHINO_JAR = THIRD_PARTY_DIR + "rhino-1.7.10/rhino-1.7.10.jar";
   public static final String K2JVMCompiler = "org.jetbrains.kotlin.cli.jvm.K2JVMCompiler";
   private static final String ANDROID_JAR_PATTERN =
       THIRD_PARTY_DIR + "android_jar/lib-v%s/android.jar";
@@ -250,14 +246,9 @@
   public static final String JDK_11_TESTS_DIR = OPEN_JDK_DIR + "jdk-11-test/";
   public static final String JDK_11_TIME_TESTS_DIR = JDK_11_TESTS_DIR + "java/time/";
 
-  public static final Path JACOCO_ROOT = Paths.get(THIRD_PARTY_DIR, "jacoco", "0.8.6");
-  public static final Path JACOCO_AGENT = JACOCO_ROOT.resolve(Paths.get("lib", "jacocoagent.jar"));
-  public static final Path JACOCO_CLI = JACOCO_ROOT.resolve(Paths.get("lib", "jacococli.jar"));
   public static final String PROGUARD_SETTINGS_FOR_INTERNAL_APPS =
       THIRD_PARTY_DIR + "proguardsettings/";
 
-  public static final Path RETRACE_MAPS_DIR = Paths.get(THIRD_PARTY_DIR, "r8mappings");
-
   // TODO(b/270105162): These should be removed when finished transitioning.
   public static final Path R8_WITH_RELOCATED_DEPS_17_JAR =
       Paths.get(LIBS_DIR, "r8_with_relocated_deps_17.jar");
@@ -2282,7 +2273,7 @@
     List<String> cmdline = new ArrayList<>();
     cmdline.add(TestRuntime.getSystemRuntime().asCf().getJavaExecutable().toString());
     cmdline.add("-jar");
-    cmdline.add(ToolHelper.JACOCO_CLI.toString());
+    cmdline.add(TestDeps.getJacocoCliJar().toString());
     cmdline.add("instrument");
     cmdline.add(sourceClassFiles.toString());
     cmdline.add("--dest");
@@ -2296,7 +2287,7 @@
     List<String> cmdline = new ArrayList<>();
     cmdline.add(TestRuntime.getSystemRuntime().asCf().getJavaExecutable().toString());
     cmdline.add("-jar");
-    cmdline.add(ToolHelper.JACOCO_CLI.toString());
+    cmdline.add(TestDeps.getJacocoCliJar().toString());
     cmdline.add("report");
     cmdline.add(jacocoExec.toString());
     cmdline.add("--classfiles");
