diff --git a/compiler/tests-common-new/build.gradle.kts b/compiler/tests-common-new/build.gradle.kts
index ea88dfa..6ea0cfd 100644
--- a/compiler/tests-common-new/build.gradle.kts
+++ b/compiler/tests-common-new/build.gradle.kts
@@ -49,13 +49,7 @@
 optInToExperimentalCompilerApi()
 optInToUnsafeDuringIrConstructionAPI()
 
-val zipJsr305TestAnnotations = tasks.register<Zip>("zipJsr305TestAnnotations") {
-    archiveFileName.set("jsr305_test_annotations.jar")
-    from { project(":compiler").layout.projectDirectory.dir("testData/diagnostics/helpers/jsr305_test_annotations") }
-}
-
 tasks.processTestResources.configure {
-    from(zipJsr305TestAnnotations)
     from(project(":compiler").layout.projectDirectory.dir("testData")) {
         include("/diagnostics/helpers/**")
         include("/codegen/helpers/**")
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/JvmForeignAnnotationsConfigurator.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/JvmForeignAnnotationsConfigurator.kt
index 9326552..a6af5d6 100644
--- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/JvmForeignAnnotationsConfigurator.kt
+++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/configuration/JvmForeignAnnotationsConfigurator.kt
@@ -34,8 +34,8 @@
 import org.jetbrains.kotlin.test.services.standardLibrariesPathProvider
 import org.jetbrains.kotlin.test.util.KtTestUtil
 import java.io.File
-import java.nio.file.Files
-import java.util.zip.ZipInputStream
+import java.net.URI
+import java.util.zip.ZipFile
 import kotlin.io.path.createTempDirectory
 
 enum class JavaForeignAnnotationType(val path: String) {
@@ -47,7 +47,7 @@
 
 open class JvmForeignAnnotationsConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
     companion object {
-        val JSR_305_TEST_ANNOTATIONS_PATH = this::class.java.classLoader.getResource("jsr305_test_annotations.jar")!!
+        const val JSR_305_TEST_ANNOTATIONS_PATH = "diagnostics/helpers/jsr305_test_annotations"
     }
 
     override val directiveContainers: List<DirectivesContainer>
@@ -110,23 +110,36 @@
         configuration.addJvmClasspathRoot(testServices.standardLibrariesPathProvider.jvmAnnotationsForTests())
 
         if (JvmEnvironmentConfigurationDirectives.WITH_JSR305_TEST_ANNOTATIONS in registeredDirectives) {
-            val jsr305AnnotationsDir = createTempDirectory().toFile().also {
-                ZipInputStream(JSR_305_TEST_ANNOTATIONS_PATH.openStream()).use { zip ->
-                    while (true) {
-                        val entry = zip.nextEntry ?: break
-                        val file = File(it, entry.name)
-                        if (entry.isDirectory) {
-                            file.mkdirs()
-                        } else {
-                            file.parentFile.mkdirs()
-                            Files.newOutputStream(file.toPath()).use { zip.copyTo(it) }
-                        }
+            val resourceUri = this::class.java.classLoader.getResource(JSR_305_TEST_ANNOTATIONS_PATH)!!.toURI()
+            val target = createTempDirectory().toFile()
+            when (resourceUri.scheme) {
+                "jar" -> {
+                    val array = resourceUri.toString().split("!")
+                    val jarUri = URI.create(array[0])
+                    val pathInsideJar = array[1]
+                    val path = jarUri.toString().substringAfterLast(":")
+                    ZipFile(path).use { zipFile ->
+                        val prefix = pathInsideJar.removePrefix("/")
+                        zipFile.entries().asSequence()
+                            .filter { entry -> !entry.isDirectory && entry.name.startsWith(prefix) }
+                            .forEach { entry ->
+                                val relativePath = entry.name.removePrefix(prefix)
+                                val targetFile = File(target, relativePath)
+                                targetFile.parentFile.mkdirs()
+                                zipFile.getInputStream(entry).use { input ->
+                                    targetFile.outputStream().use { output ->
+                                        input.copyTo(output)
+                                    }
+                                }
+                            }
                     }
                 }
+                "file" -> File(resourceUri).copyRecursively(target)
+                else -> throw UnsupportedOperationException("Unsupported URI scheme: ${resourceUri.scheme}")
             }
             configuration.addJvmClasspathRoot(
                 MockLibraryUtil.compileJavaFilesLibraryToJar(
-                    jsr305AnnotationsDir.path,
+                    target.path,
                     "jsr-305-test-annotations",
                     assertions = JUnit5Assertions,
                     extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath } + jsr305JarFile.absolutePath
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/sourceProviders/IrInterpreterHelpersSourceFilesProvider.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/sourceProviders/IrInterpreterHelpersSourceFilesProvider.kt
index bc5f884..54e0074 100644
--- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/sourceProviders/IrInterpreterHelpersSourceFilesProvider.kt
+++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/sourceProviders/IrInterpreterHelpersSourceFilesProvider.kt
@@ -5,7 +5,6 @@
 
 package org.jetbrains.kotlin.test.services.sourceProviders
 
-import com.intellij.openapi.application.PathManager
 import org.jetbrains.kotlin.test.directives.AdditionalFilesDirectives
 import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
 import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
@@ -57,19 +56,24 @@
         val stdlibPath = File(this::class.java.classLoader.getResource(STDLIB_PATH)!!.toURI())
 
         return directories.flatMap { directory ->
-            PathManager.getResourceRoot(this::class.java.classLoader, directory)?.let {
-                File(it).walkTopDown()
-                    .mapNotNull { file ->
-                        val canonicalPath = file.parentFile.canonicalPath
-                        val relativePath = runIf(canonicalPath.startsWith(stdlibPath.canonicalPath)) {
-                            canonicalPath.removePrefix(stdlibPath.canonicalPath + File.separatorChar)
+            val resourceUri = this::class.java.classLoader.getResource(directory)!!.toURI()
+            when (resourceUri.scheme) {
+                "file" -> {
+                    File(resourceUri).walkTopDown()
+                        .mapNotNull { file ->
+                            val canonicalPath = file.parentFile.canonicalPath
+                            val relativePath = runIf(canonicalPath.startsWith(stdlibPath.canonicalPath)) {
+                                canonicalPath.removePrefix(stdlibPath.canonicalPath + File.separatorChar)
+                            }
+                            file.takeIf { it.isFile }
+                                ?.takeUnless { EXCLUDES.any { file.endsWith(it) } }
+                                ?.toTestFile(relativePath)
                         }
-                        file.takeIf { it.isFile }
-                            ?.takeUnless { EXCLUDES.any { file.endsWith(it) } }
-                            ?.toTestFile(relativePath)
-                    }
-                    .toList()
-            }!!
+                        .toList()
+                }
+                // TODO(KT-76305) add support for resources in jars
+                else -> throw UnsupportedOperationException("Unsupported URI scheme: ${resourceUri.scheme}")
+            }
         }
     }
 
