diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index ccf5246..b1d35ac 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -154,6 +154,12 @@
             include("${exampleDir.name}/**/*.class")
             exclude("**/TestGenerator*")
           }
+          // Copy additional resources into the jar.
+          from (exampleDir) {
+            exclude("**/*.java")
+            exclude("**/keep-rules*.txt")
+            into(exampleDir.name)
+          }
         }.get())
       }
     }
@@ -310,6 +316,19 @@
     "apiDatabase",
     Paths.get("third_party", "api_database", "api_database").toFile(),
     Paths.get("third_party", "api_database", "api_database.tar.gz.sha1").toFile())
+  val artTests = ThirdPartyDependency(
+    "art-tests",
+    Paths.get("tests", "2017-10-04", "art").toFile(),
+    Paths.get("tests", "2017-10-04", "art.tar.gz.sha1").toFile())
+  val artTestsLegacy = ThirdPartyDependency(
+    "art-tests-legacy",
+    Paths.get("tests", "2016-12-19", "art").toFile(),
+    Paths.get("tests", "2016-12-19", "art.tar.gz.sha1").toFile())
+  val clank = ThirdPartyDependency(
+    "clank",
+    Paths.get("third_party", "chrome", "clank_google3_prebuilt").toFile(),
+    Paths.get("third_party", "chrome", "clank_google3_prebuilt.tar.gz.sha1").toFile(),
+    DependencyType.X20)
   val compilerApi = ThirdPartyDependency(
     "compiler-api",
     Paths.get(
@@ -333,9 +352,18 @@
   val desugarJdkLibs = ThirdPartyDependency(
     "desugar-jdk-libs",
     Paths.get("third_party", "openjdk", "desugar_jdk_libs").toFile(),
-    Paths.get("third_party", "openjdk", "desugar_jdk_libs.tar.gz.sha1").toFile()
-  )
+    Paths.get("third_party", "openjdk", "desugar_jdk_libs.tar.gz.sha1").toFile())
+  val desugarJdkLibsLegacy = ThirdPartyDependency(
+    "desugar-jdk-libs-legacy",
+    Paths.get("third_party", "openjdk", "desugar_jdk_libs_legacy").toFile(),
+    Paths.get("third_party", "openjdk", "desugar_jdk_libs_legacy.tar.gz.sha1").toFile())
+  val desugarLibraryReleases = getThirdPartyDesugarLibraryReleases()
   // TODO(b/289363570): This could probably be removed.
+  val framework = ThirdPartyDependency(
+    "framework",
+    Paths.get("third_party", "framework").toFile(),
+    Paths.get("third_party", "framework.tar.gz.sha1").toFile(),
+    DependencyType.X20)
   val iosched2019 = ThirdPartyDependency(
     "iosched-2019",
     Paths.get("third_party", "iosched_2019").toFile(),
@@ -343,13 +371,13 @@
   val desugarJdkLibs11 = ThirdPartyDependency(
     "desugar-jdk-libs-11",
     Paths.get("third_party", "openjdk", "desugar_jdk_libs_11").toFile(),
-    Paths.get("third_party", "openjdk", "desugar_jdk_libs_11.tar.gz.sha1").toFile()
-  )
+    Paths.get("third_party", "openjdk", "desugar_jdk_libs_11.tar.gz.sha1").toFile())
+  val gmscoreVersions = getGmsCoreVersions()
+  val internalIssues = getInternalIssues()
   val jacoco = ThirdPartyDependency(
     "jacoco",
     Paths.get("third_party", "jacoco", "0.8.6").toFile(),
-    Paths.get("third_party", "jacoco", "0.8.6.tar.gz.sha1").toFile()
-  )
+    Paths.get("third_party", "jacoco", "0.8.6.tar.gz.sha1").toFile())
   val jasmin = ThirdPartyDependency(
     "jasmin",
     Paths.get("third_party", "jasmin").toFile(),
@@ -361,14 +389,12 @@
   val java8Runtime = ThirdPartyDependency(
     "openjdk-rt-1.8",
     Paths.get("third_party", "openjdk", "openjdk-rt-1.8").toFile(),
-    Paths.get("third_party", "openjdk", "openjdk-rt-1.8.tar.gz.sha1").toFile()
-  )
+    Paths.get("third_party", "openjdk", "openjdk-rt-1.8.tar.gz.sha1").toFile())
   val jdks = getJdks()
   val jdk11Test = ThirdPartyDependency(
     "jdk-11-test",
     Paths.get("third_party", "openjdk", "jdk-11-test").toFile(),
-    Paths.get("third_party", "openjdk", "jdk-11-test.tar.gz.sha1").toFile()
-  )
+    Paths.get("third_party", "openjdk", "jdk-11-test.tar.gz.sha1").toFile())
   val jdwpTests = ThirdPartyDependency(
     "jdwp-tests",
     Paths.get("third_party", "jdwp-tests").toFile(),
@@ -378,6 +404,11 @@
     "multidex",
     Paths.get("third_party", "multidex").toFile(),
     Paths.get("third_party", "multidex.tar.gz.sha1").toFile())
+  val nest = ThirdPartyDependency(
+    "nest",
+    Paths.get("third_party", "nest", "nest_20180926_7c6cfb").toFile(),
+    Paths.get("third_party", "nest", "nest_20180926_7c6cfb.tar.gz.sha1").toFile(),
+    DependencyType.X20)
   val proguards = getThirdPartyProguards()
   val protobufLite = ThirdPartyDependency(
     "protobuf-lite",
@@ -388,6 +419,31 @@
     "r8",
     Paths.get("third_party", "r8").toFile(),
     Paths.get("third_party", "r8.tar.gz.sha1").toFile())
+  val r8Mappings = ThirdPartyDependency(
+    "r8-mappings",
+    Paths.get("third_party", "r8mappings").toFile(),
+    Paths.get("third_party", "r8mappings.tar.gz.sha1").toFile())
+  val r8v2_0_74 = ThirdPartyDependency(
+    "r8-v2-0-74",
+    Paths.get("third_party", "r8-releases","2.0.74").toFile(),
+    Paths.get("third_party", "r8-releases", "2.0.74.tar.gz.sha1").toFile())
+  val r8v3_2_54 = ThirdPartyDependency(
+    "r8-v3-2-54",
+    Paths.get("third_party", "r8-releases","3.2.54").toFile(),
+    Paths.get("third_party", "r8-releases", "3.2.54.tar.gz.sha1").toFile())
+  val retraceBenchmark = ThirdPartyDependency(
+    "retrace-benchmark",
+    Paths.get("third_party", "retrace_benchmark").toFile(),
+    Paths.get("third_party", "retrace_benchmark.tar.gz.sha1").toFile())
+  val retraceBinaryCompatibility = ThirdPartyDependency(
+    "retrace-binary-compatibility",
+    Paths.get("third_party", "retrace", "binary_compatibility").toFile(),
+    Paths.get("third_party", "retrace", "binary_compatibility.tar.gz.sha1").toFile())
+  val retraceInternal = ThirdPartyDependency(
+    "retrace-internal",
+    Paths.get("third_party", "retrace_internal").toFile(),
+    Paths.get("third_party", "retrace_internal.tar.gz.sha1").toFile(),
+    DependencyType.X20)
   val rhino = ThirdPartyDependency(
     "rhino",
     Paths.get("third_party", "rhino-1.7.10").toFile(),
@@ -400,6 +456,10 @@
     "smali",
     Paths.get("third_party", "smali").toFile(),
     Paths.get("third_party", "smali.tar.gz.sha1").toFile())
+  val tivi = ThirdPartyDependency(
+    "tivi",
+    Paths.get("third_party", "opensource-apps", "tivi").toFile(),
+    Paths.get("third_party", "opensource-apps", "tivi.tar.gz.sha1").toFile())
 }
 
 fun getThirdPartyAndroidJars() : List<ThirdPartyDependency> {
@@ -496,4 +556,37 @@
       it,
       Paths.get("third_party", "kotlin", it).toFile(),
       Paths.get("third_party", "kotlin", "${it}.tar.gz.sha1").toFile())}
+}
+
+fun getThirdPartyDesugarLibraryReleases() : List<ThirdPartyDependency> {
+  return listOf(
+    "1.0.9",
+    "1.0.10",
+    "1.1.0",
+    "1.1.1",
+    "1.1.5")
+    .map { ThirdPartyDependency(
+      "desugar-library-release-$it",
+      Paths.get("third_party", "openjdk", "desugar_jdk_libs_releases", it).toFile(),
+      Paths.get("third_party", "openjdk", "desugar_jdk_libs_releases", "${it}.tar.gz.sha1").toFile())}
+}
+
+fun getInternalIssues() : List<ThirdPartyDependency> {
+  return listOf("issue-127524985")
+    .map { ThirdPartyDependency(
+      "internal-$it",
+      Paths.get("third_party", "internal", it).toFile(),
+      Paths.get("third_party", "internal", "${it}.tar.gz.sha1").toFile(),
+      DependencyType.X20)}
+}
+
+fun getGmsCoreVersions() : List<ThirdPartyDependency> {
+  return listOf(
+    "gmscore_v10",
+    "latest")
+    .map { ThirdPartyDependency(
+      "gmscore-version-$it",
+      Paths.get("third_party", "gmscore", it).toFile(),
+      Paths.get("third_party", "gmscore", "${it}.tar.gz.sha1").toFile(),
+      DependencyType.X20)}
 }
\ No newline at end of file
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 4ceb3e6..c77fae8 100644
--- a/d8_r8/test_modules/tests_java_8/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/build.gradle.kts
@@ -56,10 +56,13 @@
 val thirdPartyRuntimeDependenciesTask = ensureThirdPartyDependencies(
   "runtimeDeps",
   listOf(
+    ThirdPartyDeps.artTests,
+    ThirdPartyDeps.artTestsLegacy,
     ThirdPartyDeps.compilerApi,
     ThirdPartyDeps.coreLambdaStubs,
     ThirdPartyDeps.dagger,
     ThirdPartyDeps.desugarJdkLibs,
+    ThirdPartyDeps.desugarJdkLibsLegacy,
     ThirdPartyDeps.desugarJdkLibs11,
     ThirdPartyDeps.iosched2019,
     ThirdPartyDeps.jacoco,
@@ -68,11 +71,18 @@
     ThirdPartyDeps.jsr223,
     ThirdPartyDeps.multidex,
     ThirdPartyDeps.r8,
+    ThirdPartyDeps.r8Mappings,
+    ThirdPartyDeps.r8v2_0_74,
+    ThirdPartyDeps.r8v3_2_54,
+    ThirdPartyDeps.retraceBenchmark,
+    ThirdPartyDeps.retraceBinaryCompatibility,
     ThirdPartyDeps.rhino,
     ThirdPartyDeps.rhinoAndroid,
-    ThirdPartyDeps.smali)
+    ThirdPartyDeps.smali,
+    ThirdPartyDeps.tivi)
     + ThirdPartyDeps.androidJars
     + ThirdPartyDeps.androidVMs
+    + ThirdPartyDeps.desugarLibraryReleases
     + ThirdPartyDeps.jdks
     + ThirdPartyDeps.kotlinCompilers
     + ThirdPartyDeps.proguards)
@@ -80,8 +90,13 @@
 val thirdPartyRuntimeInternalDependenciesTask = ensureThirdPartyDependencies(
   "runtimeInternalDeps",
   listOf(
+    ThirdPartyDeps.clank,
+    ThirdPartyDeps.framework,
+    ThirdPartyDeps.nest,
     ThirdPartyDeps.protobufLite,
-  )
+    ThirdPartyDeps.retraceInternal)
+    + ThirdPartyDeps.internalIssues
+    + ThirdPartyDeps.gmscoreVersions
 )
 
 val sourceSetDependenciesTasks = arrayOf(
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 6aa0a30..1c8634c 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -85,10 +85,12 @@
     R8CF
   }
 
-  public static final String ART_TESTS_DIR = "tests/2017-10-04/art";
-  private static final String ART_LEGACY_TESTS_DIR = "tests/2016-12-19/art/";
-  private static final String ART_TESTS_NATIVE_LIBRARY_DIR = "tests/2017-10-04/art/lib64";
-  private static final String ART_LEGACY_TESTS_NATIVE_LIBRARY_DIR = "tests/2016-12-19/art/lib64";
+  public static final String ART_TESTS_DIR = ToolHelper.ART_TESTS_ROOT + "2017-10-04/art";
+  private static final String ART_LEGACY_TESTS_DIR = ToolHelper.ART_TESTS_ROOT + "2016-12-19/art/";
+  private static final String ART_TESTS_NATIVE_LIBRARY_DIR =
+      ToolHelper.ART_TESTS_ROOT + "2017-10-04/art/lib64";
+  private static final String ART_LEGACY_TESTS_NATIVE_LIBRARY_DIR =
+      ToolHelper.ART_TESTS_ROOT + "2016-12-19/art/lib64";
 
   private static final RuntimeSet LEGACY_RUNTIME =
       TestCondition.runtimes(
@@ -104,11 +106,6 @@
           DexVm.Version.V13_0_0,
           DexVm.Version.V14_0_0);
 
-  private static final String JUNIT_TEST_RUNNER = "org.junit.runner.JUnitCore";
-  private static final String JUNIT_JAR = "third_party/junit/junit-4.13-beta-2.jar";
-  private static final String HAMCREST_JAR =
-      "third_party/gradle/gradle/lib/plugins/hamcrest-core-1.3.jar";
-
   // Test that required to set min-api to a specific value.
   private static Map<String, AndroidApiLevel> needMinSdkVersion =
       new ImmutableMap.Builder<String, AndroidApiLevel>()
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index ea8e96c..177d064 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -111,7 +111,8 @@
     return Paths.get(current).getParent().toString() + "/";
   }
 
-  public static final String SOURCE_DIR = getProjectRoot() + "src/main/java/";
+  public static final String SOURCE_DIR = getProjectRoot() + "src/";
+  public static final String MAIN_SOURCE_DIR = getProjectRoot() + "src/main/java/";
   public static final String LIBRARY_DESUGAR_SOURCE_DIR = getProjectRoot() + "src/library_desugar/";
   public static final String BUILD_DIR = getProjectRoot() + "build/";
   public static final String TEST_MODULE_DIR = getProjectRoot() + "d8_r8/test_modules/";
@@ -121,13 +122,13 @@
   public static final String DEPENDENCIES = THIRD_PARTY_DIR + "dependencies/";
   public static final String TOOLS_DIR = getProjectRoot() + "tools/";
   public static final String TESTS_DIR = getProjectRoot() + "src/test/";
+  public static final String ART_TESTS_ROOT = getProjectRoot() + "tests/";
   public static final String TESTS_SOURCE_DIR = TESTS_DIR + "java/";
   public static final String EXAMPLES_DIR = TESTS_DIR + "examples/";
   public static final String EXAMPLES_ANDROID_N_DIR = TESTS_DIR + "examplesAndroidN/";
   public static final String EXAMPLES_ANDROID_O_DIR = TESTS_DIR + "examplesAndroidO/";
   public static final String EXAMPLES_ANDROID_P_DIR = TESTS_DIR + "examplesAndroidP/";
   public static final String TESTS_BUILD_DIR = BUILD_DIR + "test/";
-  public static final String JDK_TESTS_BUILD_DIR = TESTS_BUILD_DIR + "jdk11Tests/";
   public static final String EXAMPLES_BUILD_DIR = TESTS_BUILD_DIR + "examples/";
   public static final String EXAMPLES_CF_DIR = EXAMPLES_BUILD_DIR + "classes/";
   public static final String EXAMPLES_ANDROID_N_BUILD_DIR = TESTS_BUILD_DIR + "examplesAndroidN/";
diff --git a/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java b/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
index df687ed..5826a9a 100644
--- a/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
@@ -65,7 +65,7 @@
   private static final Path PATH_TO_CORE_JAR =
       Paths.get(ToolHelper.THIRD_PARTY_DIR, "android_jar", "libcore_latest", "core-oj.jar");
   private static final Path DESTINATION_FILE =
-      Paths.get(ToolHelper.SOURCE_DIR)
+      Paths.get(ToolHelper.MAIN_SOURCE_DIR)
           .resolve(PACKAGE_NAME.replace('.', '/'))
           .resolve(CLASS_NAME + ".java");
   private static final AndroidApiLevel GENERATED_FOR_API_LEVEL = AndroidApiLevel.U;
diff --git a/src/test/java/com/android/tools/r8/benchmarks/appdumps/TiviBenchmarks.java b/src/test/java/com/android/tools/r8/benchmarks/appdumps/TiviBenchmarks.java
index ca31ef6..166dade 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/appdumps/TiviBenchmarks.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/appdumps/TiviBenchmarks.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.benchmarks.appdumps;
 
 import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.benchmarks.BenchmarkBase;
 import com.android.tools.r8.benchmarks.BenchmarkConfig;
 import com.google.common.collect.ImmutableList;
@@ -17,7 +18,7 @@
 @RunWith(Parameterized.class)
 public class TiviBenchmarks extends BenchmarkBase {
 
-  private static final Path dump = Paths.get("third_party", "opensource-apps", "tivi");
+  private static final Path dump = Paths.get(ToolHelper.THIRD_PARTY_DIR, "opensource-apps", "tivi");
 
   public TiviBenchmarks(BenchmarkConfig config, TestParameters parameters) {
     super(config, parameters);
diff --git a/src/test/java/com/android/tools/r8/benchmarks/retrace/RetraceStackTraceBenchmark.java b/src/test/java/com/android/tools/r8/benchmarks/retrace/RetraceStackTraceBenchmark.java
index 3cd934b..28e1e83 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/retrace/RetraceStackTraceBenchmark.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/retrace/RetraceStackTraceBenchmark.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.benchmarks.retrace;
 
 import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.benchmarks.BenchmarkBase;
 import com.android.tools.r8.benchmarks.BenchmarkConfig;
 import com.android.tools.r8.benchmarks.BenchmarkDependency;
@@ -28,7 +29,8 @@
 public class RetraceStackTraceBenchmark extends BenchmarkBase {
 
   private static final BenchmarkDependency benchmarkDependency =
-      new BenchmarkDependency("retraceBenchmark", "retrace_benchmark", Paths.get("third_party"));
+      new BenchmarkDependency(
+          "retraceBenchmark", "retrace_benchmark", Paths.get(ToolHelper.THIRD_PARTY_DIR));
 
   @Parameters(name = "{0}")
   public static List<Object[]> data() {
diff --git a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapTest.java b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapTest.java
index 87bbfaf..ee0ff21 100644
--- a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapTest.java
+++ b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapTest.java
@@ -28,7 +28,7 @@
 public class BootstrapTest extends TestBase {
 
   private static final Path R8_STABLE_JAR =
-      Paths.get("third_party", "r8-releases", "3.2.54", "r8.jar");
+      Paths.get(ToolHelper.THIRD_PARTY_DIR, "r8-releases", "3.2.54", "r8.jar");
 
   private static final Class<?> HELLO_CLASS = HelloTestRunner.getHelloClass();
   private static final String HELLO_EXPECTED = HelloTestRunner.getExpectedOutput();
diff --git a/src/test/java/com/android/tools/r8/cfmethodgeneration/CodeGenerationBase.java b/src/test/java/com/android/tools/r8/cfmethodgeneration/CodeGenerationBase.java
index 0f3c23b..5d1443b 100644
--- a/src/test/java/com/android/tools/r8/cfmethodgeneration/CodeGenerationBase.java
+++ b/src/test/java/com/android/tools/r8/cfmethodgeneration/CodeGenerationBase.java
@@ -71,7 +71,7 @@
   }
 
   public Path getGeneratedFile() {
-    return Paths.get(ToolHelper.SOURCE_DIR, getGeneratedType().getInternalName() + ".java");
+    return Paths.get(ToolHelper.MAIN_SOURCE_DIR, getGeneratedType().getInternalName() + ".java");
   }
 
   protected abstract DexType getGeneratedType();
diff --git a/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java b/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java
index a6dac7d..34cd179 100644
--- a/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java
+++ b/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java
@@ -82,8 +82,12 @@
 
   public static Path getProjectRoot() {
     String userDirProperty = System.getProperty("user.dir");
-    if (userDirProperty.endsWith("d8_r8/test")) {
-      return Paths.get(userDirProperty).getParent().getParent();
+    if (userDirProperty.contains("d8_r8")) {
+      Path userDirPath = Paths.get(userDirProperty);
+      while (userDirPath.toString().contains("d8_r8")) {
+        userDirPath = userDirPath.getParent();
+      }
+      return userDirPath;
     }
     return Paths.get("");
   }
diff --git a/src/test/java/com/android/tools/r8/d8/D8FrameworkDexPassthroughMarkerTest.java b/src/test/java/com/android/tools/r8/d8/D8FrameworkDexPassthroughMarkerTest.java
index 0370c29..64e0f21 100644
--- a/src/test/java/com/android/tools/r8/d8/D8FrameworkDexPassthroughMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/d8/D8FrameworkDexPassthroughMarkerTest.java
@@ -35,7 +35,8 @@
 public class D8FrameworkDexPassthroughMarkerTest {
 
   private static final Path FRAMEWORK_JAR =
-      Paths.get("tools/linux/art-5.1.1/product/mako/system/framework/framework.jar");
+      Paths.get(
+          ToolHelper.TOOLS_DIR + "linux/art-5.1.1/product/mako/system/framework/framework.jar");
 
   @Rule
   public TemporaryFolder output = ToolHelper.getTemporaryFolderForTest();
diff --git a/src/test/java/com/android/tools/r8/desugar/b72538146/B72538146.java b/src/test/java/com/android/tools/r8/desugar/b72538146/B72538146.java
index 0361951..94ea7f5 100644
--- a/src/test/java/com/android/tools/r8/desugar/b72538146/B72538146.java
+++ b/src/test/java/com/android/tools/r8/desugar/b72538146/B72538146.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
@@ -58,7 +59,11 @@
     // Run the classloader test loading the two dex applications.
     testForD8()
         .addProgramFiles(
-            Paths.get("build/test/examplesAndroidApi/classes/classloader/Runner.class"))
+            Paths.get(ToolHelper.TESTS_BUILD_DIR)
+                .resolve("examplesAndroidApi")
+                .resolve("classes")
+                .resolve("classloader")
+                .resolve("Runner.class"))
         .setMinApi(parameters)
         .compile()
         .run(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11Jsr166Tests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11Jsr166Tests.java
index c43800c..229ccfe 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11Jsr166Tests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11Jsr166Tests.java
@@ -17,6 +17,7 @@
 import com.android.tools.r8.SingleTestRunResult;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
 import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
@@ -65,7 +66,7 @@
   public static List<Object[]> data() {
     return buildParameters(
         // TODO(134732760): Support Dalvik VMs, currently fails because libjavacrypto is required
-        // and present only in ART runtimes.
+        //   and present only in ART runtimes.
         getTestParameters()
             .withDexRuntimesStartingFromIncluding(Version.V5_1_1)
             .withAllApiLevels()
@@ -81,9 +82,12 @@
     Path jsr166SuiteClasses = getStaticTemp().newFolder("jsr166SuiteClasses").toPath();
 
     javac(TestRuntime.getCheckedInJdk11(), getStaticTemp())
-        .addClasspathFiles(Paths.get("third_party/junit/junit-4.13-beta-2.jar"))
+        .addClasspathFiles(Paths.get(ToolHelper.THIRD_PARTY_DIR + "junit/junit-4.13-beta-2.jar"))
         .addSourceFiles(
-            Files.walk(Paths.get("third_party/openjdk/jdk-11-test/java/util/concurrent/tck"))
+            Files.walk(
+                    Paths.get(
+                        ToolHelper.THIRD_PARTY_DIR
+                            + "openjdk/jdk-11-test/java/util/concurrent/tck"))
                 .filter(path -> path.getFileName().toString().endsWith(".java"))
                 .collect(Collectors.toList()))
         .setOutputPath(jsr166SuiteClasses)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamAbstractTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamAbstractTests.java
index 78b8776..290a3c5 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamAbstractTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11StreamAbstractTests.java
@@ -86,7 +86,7 @@
 
   private static Path JDK_11_STREAM_TEST_CLASSES_DIR;
   private static final Path JDK_11_STREAM_TEST_FILES_DIR =
-      Paths.get("third_party/openjdk/jdk-11-test/java/util/stream/test");
+      Paths.get(ToolHelper.THIRD_PARTY_DIR + "openjdk/jdk-11-test/java/util/stream/test");
   private static Path[] JDK_11_STREAM_TEST_COMPILED_FILES;
 
   private static Path[] getJdk11StreamTestFiles() throws Exception {
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/R8CompiledThroughDexTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/R8CompiledThroughDexTest.java
index 7de441c..4cba5a7 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/R8CompiledThroughDexTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/r8ondex/R8CompiledThroughDexTest.java
@@ -82,7 +82,8 @@
     return path.toAbsolutePath().toString();
   }
 
-  private static final String R8_KEEP = Paths.get("src/main/keep.txt").toAbsolutePath().toString();
+  private static final String R8_KEEP =
+      Paths.get(ToolHelper.SOURCE_DIR + "main/keep.txt").toAbsolutePath().toString();
 
   private Pair<List<String>, Consumer<Builder>> buildArguments() {
     ImmutableList.Builder<String> arguments = ImmutableList.builder();
diff --git a/src/test/java/com/android/tools/r8/determinism/AppDeterminismTest.java b/src/test/java/com/android/tools/r8/determinism/AppDeterminismTest.java
index e16492e..bfd26f1 100644
--- a/src/test/java/com/android/tools/r8/determinism/AppDeterminismTest.java
+++ b/src/test/java/com/android/tools/r8/determinism/AppDeterminismTest.java
@@ -7,6 +7,7 @@
 
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.dump.CompilerDump;
 import com.android.tools.r8.dump.ProguardConfigSanitizer;
 import com.android.tools.r8.utils.DeterminismChecker;
@@ -39,7 +40,7 @@
   public void test() throws Exception {
     CompilerDump dump =
         CompilerDump.fromArchive(
-            Paths.get("third_party", "opensource-apps", app, "dump_app.zip"),
+            Paths.get(ToolHelper.THIRD_PARTY_DIR, "opensource-apps", app, "dump_app.zip"),
             temp.newFolder().toPath());
     Path logDirectory = temp.newFolder().toPath();
     Path ref = compile(1, dump, logDirectory);
diff --git a/src/test/java/com/android/tools/r8/internal/ClankDepsTest.java b/src/test/java/com/android/tools/r8/internal/ClankDepsTest.java
index d7878b9..7bff736 100644
--- a/src/test/java/com/android/tools/r8/internal/ClankDepsTest.java
+++ b/src/test/java/com/android/tools/r8/internal/ClankDepsTest.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.UnverifiableCfCodeDiagnostic;
 import java.nio.file.Path;
@@ -35,7 +36,8 @@
     parameters.assertNoneRuntime();
   }
 
-  private static final Path DIR = Paths.get("third_party", "chrome", "clank_google3_prebuilt");
+  private static final Path DIR =
+      Paths.get(ToolHelper.THIRD_PARTY_DIR, "chrome", "clank_google3_prebuilt");
   private static final Path CLASSES = DIR.resolve("classes.jar");
   private static final Path CONFIG = DIR.resolve("proguard.txt");
 
diff --git a/src/test/java/com/android/tools/r8/internal/D8Framework14082017DesugaredVerificationTest.java b/src/test/java/com/android/tools/r8/internal/D8Framework14082017DesugaredVerificationTest.java
index 003b6eb..215f913 100644
--- a/src/test/java/com/android/tools/r8/internal/D8Framework14082017DesugaredVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/D8Framework14082017DesugaredVerificationTest.java
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.D8Command;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.VmTestRunner;
 import com.android.tools.r8.VmTestRunner.IgnoreIfVmOlderThan;
@@ -16,7 +17,8 @@
 @RunWith(VmTestRunner.class)
 public class D8Framework14082017DesugaredVerificationTest extends CompilationTestBase {
   private static final int MIN_SDK = AndroidApiLevel.N.getLevel();
-  private static final String JAR = "third_party/framework/framework_14082017_desugared.jar";
+  private static final String JAR =
+      ToolHelper.THIRD_PARTY_DIR + "framework/framework_14082017_desugared.jar";
 
   @Test
   @IgnoreIfVmOlderThan(Version.V7_0_0)
diff --git a/src/test/java/com/android/tools/r8/internal/D8FrameworkVerificationTest.java b/src/test/java/com/android/tools/r8/internal/D8FrameworkVerificationTest.java
index f330553..1927baa 100644
--- a/src/test/java/com/android/tools/r8/internal/D8FrameworkVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/D8FrameworkVerificationTest.java
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.D8Command;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.VmTestRunner;
 import com.android.tools.r8.VmTestRunner.IgnoreIfVmOlderThan;
@@ -16,7 +17,8 @@
 @RunWith(VmTestRunner.class)
 public class D8FrameworkVerificationTest extends CompilationTestBase {
   private static final int MIN_SDK = AndroidApiLevel.N.getLevel();
-  private static final String JAR = "third_party/framework/framework_160115954.jar";
+  private static final String JAR =
+      ToolHelper.THIRD_PARTY_DIR + "framework/framework_160115954.jar";
 
   @Test
   @IgnoreIfVmOlderThan(Version.V7_0_0)
diff --git a/src/test/java/com/android/tools/r8/internal/GMSCoreLatestTest.java b/src/test/java/com/android/tools/r8/internal/GMSCoreLatestTest.java
index 624fa02..ef9401a 100644
--- a/src/test/java/com/android/tools/r8/internal/GMSCoreLatestTest.java
+++ b/src/test/java/com/android/tools/r8/internal/GMSCoreLatestTest.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ThrowableConsumer;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AssertionUtils;
 import com.google.common.collect.Sets;
@@ -31,7 +32,7 @@
 @RunWith(Parameterized.class)
 public class GMSCoreLatestTest extends GMSCoreCompilationTestBase {
 
-  private static final Path base = Paths.get("third_party/gmscore/latest/");
+  private static final Path base = Paths.get(ToolHelper.THIRD_PARTY_DIR + "gmscore/latest/");
 
   private static Path sanitizedLibrary;
   private static Path sanitizedProguardConfiguration;
diff --git a/src/test/java/com/android/tools/r8/internal/GMSCoreV10DisassemblerTest.java b/src/test/java/com/android/tools/r8/internal/GMSCoreV10DisassemblerTest.java
index 014f5d3..9af0266 100644
--- a/src/test/java/com/android/tools/r8/internal/GMSCoreV10DisassemblerTest.java
+++ b/src/test/java/com/android/tools/r8/internal/GMSCoreV10DisassemblerTest.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.internal;
 
 import com.android.tools.r8.Disassemble;
+import com.android.tools.r8.ToolHelper;
 import java.io.OutputStream;
 import java.io.PrintStream;
 import java.nio.file.Paths;
@@ -18,7 +19,7 @@
 @RunWith(Parameterized.class)
 public class GMSCoreV10DisassemblerTest extends GMSCoreCompilationTestBase {
 
-  private static final String APP_DIR = "third_party/gmscore/gmscore_v10/";
+  private static final String APP_DIR = ToolHelper.THIRD_PARTY_DIR + "gmscore/gmscore_v10/";
 
   @Parameters(name = "deobfuscate: {0} smali: {1}")
   public static Iterable<Object[]> data() {
diff --git a/src/test/java/com/android/tools/r8/internal/GMSCoreV10ProguardMapReaderTest.java b/src/test/java/com/android/tools/r8/internal/GMSCoreV10ProguardMapReaderTest.java
index 58bef78..8a9e624 100644
--- a/src/test/java/com/android/tools/r8/internal/GMSCoreV10ProguardMapReaderTest.java
+++ b/src/test/java/com/android/tools/r8/internal/GMSCoreV10ProguardMapReaderTest.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.internal;
 
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.naming.ClassNameMapper;
 import java.io.IOException;
 import java.nio.file.Path;
@@ -12,7 +13,7 @@
 
 public class GMSCoreV10ProguardMapReaderTest extends GMSCoreCompilationTestBase {
 
-  private static final String APP_DIR = "third_party/gmscore/gmscore_v10/";
+  private static final String APP_DIR = ToolHelper.THIRD_PARTY_DIR + "gmscore/gmscore_v10/";
 
   @Test
   public void roundTripTestGmsCoreV10() throws IOException {
diff --git a/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java b/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java
index 6229869..4adab47 100644
--- a/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java
+++ b/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ThrowableConsumer;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.google.common.collect.Sets;
 import java.nio.file.Path;
@@ -29,7 +30,7 @@
 @RunWith(Parameterized.class)
 public class GMSCoreV10Test extends GMSCoreCompilationTestBase {
 
-  private static final Path base = Paths.get("third_party/gmscore/gmscore_v10/");
+  private static final Path base = Paths.get(ToolHelper.THIRD_PARTY_DIR + "gmscore/gmscore_v10/");
 
   private static Path sanitizedLibrary;
   private static Path sanitizedProguardConfiguration;
diff --git a/src/test/java/com/android/tools/r8/internal/LibrarySanitizer.java b/src/test/java/com/android/tools/r8/internal/LibrarySanitizer.java
index e43dd8e..c28a84d 100644
--- a/src/test/java/com/android/tools/r8/internal/LibrarySanitizer.java
+++ b/src/test/java/com/android/tools/r8/internal/LibrarySanitizer.java
@@ -72,7 +72,7 @@
   public LibrarySanitizer sanitize() throws IOException {
     ImmutableList.Builder<String> command =
         new ImmutableList.Builder<String>()
-            .add("tools/sanitize_libraries.py")
+            .add(ToolHelper.TOOLS_DIR + "sanitize_libraries.py")
             .add(sanitizedLibrary.toString())
             .add(sanitizedPgConf.toString());
     for (Path programFile : programFiles) {
diff --git a/src/test/java/com/android/tools/r8/internal/NestCompilationBase.java b/src/test/java/com/android/tools/r8/internal/NestCompilationBase.java
index 3328d0f..3abc750 100644
--- a/src/test/java/com/android/tools/r8/internal/NestCompilationBase.java
+++ b/src/test/java/com/android/tools/r8/internal/NestCompilationBase.java
@@ -4,8 +4,10 @@
 
 package com.android.tools.r8.internal;
 
+import com.android.tools.r8.ToolHelper;
+
 public abstract class NestCompilationBase extends CompilationTestBase {
-  static final String BASE = "third_party/nest/nest_20180926_7c6cfb/";
+  static final String BASE = ToolHelper.THIRD_PARTY_DIR + "nest/nest_20180926_7c6cfb/";
   static final String DEPLOY_JAR = "obsidian-development-debug.jar";
   static final String PG_CONF = "proguard/proguard.cfg";
   static final String PG_CONF_NO_OPT = "proguard/proguard-no-optimizations.cfg";
diff --git a/src/test/java/com/android/tools/r8/internal/Regression127524985.java b/src/test/java/com/android/tools/r8/internal/Regression127524985.java
index 229ce71..d52a80f 100644
--- a/src/test/java/com/android/tools/r8/internal/Regression127524985.java
+++ b/src/test/java/com/android/tools/r8/internal/Regression127524985.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.UnverifiableCfCodeDiagnostic;
 import java.nio.file.Path;
@@ -27,7 +28,7 @@
   private static final String MAIN = "com.android.tools.r8.internal.Regression127524985$Main";
 
   private static final Path JAR =
-      Paths.get("third_party/internal/issue-127524985/issue-127524985.jar");
+      Paths.get(ToolHelper.THIRD_PARTY_DIR + "internal/issue-127524985/issue-127524985.jar");
 
   private static final String EXPECTED = StringUtils.lines("true");
 
diff --git a/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java b/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java
index 708e588..d0b7ab2 100644
--- a/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java
+++ b/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java
@@ -13,7 +13,6 @@
 import com.android.tools.r8.utils.ArtErrorParser.ArtErrorInfo;
 import com.android.tools.r8.utils.ArtErrorParser.ArtErrorParserException;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
-import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
@@ -22,7 +21,8 @@
 public class UnicodeSetRegressionTest extends TestBase {
 
   private static final String JAR_FILE =
-      "src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSet.jar";
+      ToolHelper.SOURCE_DIR
+          + "/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSet.jar";
 
   @Test
   public void testUnicodeSetFromJar() throws Throwable {
diff --git a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
index 06892c9..8431f34 100644
--- a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
+++ b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
@@ -34,15 +34,15 @@
 
   private static final String DEFAULT_MAP_FILENAME = "proguard.map";
   private static final Path INPUT_PATH =
-      Paths.get("src/test/java/com/android/tools/r8/jsr45/HelloKt.class");
+      Paths.get(ToolHelper.TESTS_SOURCE_DIR + "com/android/tools/r8/jsr45/HelloKt.class");
   private static final Path DONT_SHRINK_DONT_OBFUSCATE_CONFIG =
-      Paths.get("src/test/java/com/android/tools/r8/jsr45/keep-rules-1.txt");
+      Paths.get(ToolHelper.TESTS_SOURCE_DIR + "com/android/tools/r8/jsr45/keep-rules-1.txt");
   private static final Path DONT_SHRINK_CONFIG =
-      Paths.get("src/test/java/com/android/tools/r8/jsr45/keep-rules-2.txt");
+      Paths.get(ToolHelper.TESTS_SOURCE_DIR + "com/android/tools/r8/jsr45/keep-rules-2.txt");
   private static final Path SHRINK_KEEP_CONFIG =
-      Paths.get("src/test/java/com/android/tools/r8/jsr45/keep-rules-3.txt");
+      Paths.get(ToolHelper.TESTS_SOURCE_DIR + "com/android/tools/r8/jsr45/keep-rules-3.txt");
   private static final Path SHRINK_NO_KEEP_CONFIG =
-      Paths.get("src/test/java/com/android/tools/r8/jsr45/keep-rules-4.txt");
+      Paths.get(ToolHelper.TESTS_SOURCE_DIR + "com/android/tools/r8/jsr45/keep-rules-4.txt");
 
   @Rule
   public TemporaryFolder tmpOutputDir = ToolHelper.getTemporaryFolderForTest();
diff --git a/src/test/java/com/android/tools/r8/maindexlist/b72312389/B72312389.java b/src/test/java/com/android/tools/r8/maindexlist/b72312389/B72312389.java
index 05e769d..730f2bf 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/b72312389/B72312389.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/b72312389/B72312389.java
@@ -39,8 +39,12 @@
     builder
         .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.O))
         .addProgramFiles(
-            Paths.get("build", "test", "examplesAndroidApi",
-                "classes", "instrumentationtest", "InstrumentationTest.class"))
+            Paths.get(
+                ToolHelper.TESTS_BUILD_DIR,
+                "examplesAndroidApi",
+                "classes",
+                "instrumentationtest",
+                "InstrumentationTest.class"))
         .addProgramFiles(ToolHelper.getFrameworkJunitJarPath(DexVm.ART_7_0_0_HOST));
   }
 
diff --git a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
index c049bd6..564fd19 100644
--- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
@@ -76,8 +76,8 @@
 @RunWith(Parameterized.class)
 public class ProguardConfigurationParserTest extends TestBase {
 
-  private static final String VALID_PROGUARD_DIR = "src/test/proguard/valid/";
-  private static final String INVALID_PROGUARD_DIR = "src/test/proguard/invalid/";
+  private static final String VALID_PROGUARD_DIR = ToolHelper.TESTS_DIR + "proguard/valid/";
+  private static final String INVALID_PROGUARD_DIR = ToolHelper.TESTS_DIR + "proguard/invalid/";
   private static final String PROGUARD_SPEC_FILE = VALID_PROGUARD_DIR + "proguard.flags";
   private static final String MULTIPLE_NAME_PATTERNS_FILE =
       VALID_PROGUARD_DIR + "multiple-name-patterns.flags";
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
index 915d92b..4b6e714 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
@@ -26,7 +26,7 @@
 @RunWith(Parameterized.class)
 public class WhyAreYouKeepingAllTest extends TestBase {
 
-  private static final Path MAIN_KEEP = Paths.get("src/main/keep.txt");
+  private static final Path MAIN_KEEP = Paths.get(ToolHelper.SOURCE_DIR + "/main/keep.txt");
 
   private static final String WHY_ARE_YOU_KEEPING_ALL = StringUtils.lines(
       "-whyareyoukeeping class ** { *; }",
