diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index 22dc719..1e7ac2b 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -28,7 +28,6 @@
 val javaTestBaseJarTask = projectTask("testbase", "testJar")
 val javaTestBaseDepsJar = projectTask("testbase", "depsJar")
 val java8TestJarTask = projectTask("tests_java_8", "testJar")
-val java17TestJarTask = projectTask("tests_java_17", "testJar")
 val bootstrapTestsDepsJarTask = projectTask("tests_bootstrap", "depsJar")
 val testsJava8SourceSetDependenciesTask = projectTask("tests_java_8", "sourceSetDependencyTask")
 
@@ -58,9 +57,7 @@
 
   val packageTests by registering(Jar::class) {
     dependsOn(java8TestJarTask)
-    dependsOn(java17TestJarTask)
     from(java8TestJarTask.outputs.files.map(::zipTree))
-    from(java17TestJarTask.outputs.files.map(::zipTree))
     exclude("META-INF/*.kotlin_module", "**/*.kotlin_metadata")
     destinationDirectory.set(getRoot().resolveAll("build", "libs"))
     archiveFileName.set("r8tests.jar")
@@ -133,17 +130,18 @@
             targetJarProvider)
     testJarProviders.forEach(::dependsOn)
     val mainDepsJar = mainDepsJarTask.getSingleOutputFile()
+    val rtJar = resolve(ThirdPartyDeps.java8Runtime, "rt.jar").getSingleFile()
     val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
     val targetJar = targetJarProvider.getSingleOutputFile()
     val testDepsJar = packageTestDeps.getSingleOutputFile()
-    inputs.files(mainDepsJar, r8WithRelocatedDepsJar, targetJar, testDepsJar)
+    inputs.files(mainDepsJar, rtJar, r8WithRelocatedDepsJar, targetJar, testDepsJar)
     inputs.files(testJarProviders.map{it.getSingleOutputFile()})
     val output = file(Paths.get("build", "libs", artifactName))
     outputs.file(output)
     val argList = mutableListOf("--keep-rules",
                     "--allowobfuscation",
                     "--lib",
-                    "${org.gradle.internal.jvm.Jvm.current().getJavaHome()}",
+                    "$rtJar",
                     "--lib",
                     "$mainDepsJar",
                     "--lib",
@@ -280,19 +278,20 @@
             testJarProvider,
             packageTestBaseExcludeKeep)
     val keepRulesFile = keepRulesFileProvider.getSingleOutputFile()
+    val rtJar = resolve(ThirdPartyDeps.java8Runtime, "rt.jar").getSingleFile()
     val r8Jar = r8JarProvider.getSingleOutputFile()
     val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
     val testBaseJar = packageTestBaseExcludeKeep.getSingleOutputFile()
     val testDepsJar = packageTestDeps.getSingleOutputFile()
     val testJar = testJarProvider.getSingleOutputFile()
-    inputs.files(keepRulesFile, r8Jar, r8WithRelocatedDepsJar, testDepsJar, testJar)
+    inputs.files(keepRulesFile, rtJar, r8Jar, r8WithRelocatedDepsJar, testDepsJar, testJar)
     val outputJar = getRoot().resolveAll("build", "libs", artifactName)
     outputs.file(outputJar)
     val args = mutableListOf(
       "--classfile",
       "--debug",
       "--lib",
-      "${org.gradle.internal.jvm.Jvm.current().getJavaHome()}",
+      "$rtJar",
       "--classpath",
       "$r8Jar",
       "--classpath",
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 9418b3a..2079c40 100644
--- a/d8_r8/test_modules/tests_java_17/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_17/build.gradle.kts
@@ -58,13 +58,5 @@
     systemProperty("TESTBASE_DATA_LOCATION",
                    testbaseJavaCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
   }
-
-  val testJar by registering(Jar::class) {
-    from(sourceSets.test.get().output)
-    // TODO(b/296486206): Seems like IntelliJ has a problem depending on test source sets. Renaming
-    //  this from the default name (tests_java_8.jar) will allow IntelliJ to find the resources in
-    //  the jar and not show red underlines. However, navigation to base classes will not work.
-    archiveFileName.set("not_named_tests_java_17.jar")
-  }
 }
 
diff --git a/tools/jdk.py b/tools/jdk.py
index d16cad0..3b41c3b 100755
--- a/tools/jdk.py
+++ b/tools/jdk.py
@@ -15,17 +15,11 @@
 
 
 def GetJdkHome():
-    return GetJdk17Home()
+    return GetJdk11Home()
 
 
 def GetJdkRoot():
-    return GetJdk17Root()
-
-
-def GetJdk17Root():
-    root = os.path.join(JDK_DIR, 'jdk-17')
-    os_root = GetOSPath(root)
-    return os_root if os_root else os.environ['JAVA_HOME']
+    return GetJdk11Root()
 
 
 def GetJdk11Root():
@@ -55,15 +49,6 @@
     return dirs
 
 
-def GetJdk17Home():
-    root = GetJdk17Root()
-    # osx has the home inside Contents/Home in the bundle
-    if defines.IsOsX():
-        return os.path.join(root, 'Contents', 'Home')
-    else:
-        return root
-
-
 def GetJdk11Home():
     root = GetJdk11Root()
     # osx has the home inside Contents/Home in the bundle
