diff --git a/build.gradle.kts b/build.gradle.kts index 51c78fcd71e..ff13c2346c0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -114,6 +114,7 @@ rootProject.apply { from(rootProject.file("gradle/checkCacheability.gradle.kts")) from(rootProject.file("gradle/retryPublishing.gradle.kts")) from(rootProject.file("gradle/modularizedTestConfigurations.gradle.kts")) + from(rootProject.file("gradle/ideaRtHack.gradle.kts")) } IdeVersionConfigurator.setCurrentIde(project) diff --git a/gradle/ideaRtHack.gradle.kts b/gradle/ideaRtHack.gradle.kts new file mode 100644 index 00000000000..3d76d62a90f --- /dev/null +++ b/gradle/ideaRtHack.gradle.kts @@ -0,0 +1,23 @@ +// Remove this hack when IDEA-285445 (Gradle plugin doesn't handle java-rt from IDEA maven repo the same way as idea_rt.jar) is fixed +// https://github.com/JetBrains/intellij-community/blob/0e2aa4030ee763c9b0c828f0b5119f4cdcc66f35/plugins/gradle/java/resources/org/jetbrains/plugins/gradle/java/addTestListener.groovy#L11 +if (isIdeaActive) { + gradle.taskGraph.whenReady { + allTasks.filterIsInstance().forEach { task -> + task.doFirst { + task.classpath.files.find { it.name.startsWith("java-rt") }?.let { javaRtJar -> + try { + val urlClassLoader = + Class.forName("org.gradle.launcher.daemon.bootstrap.DaemonMain").classLoader as? java.net.URLClassLoader + + urlClassLoader?.let { + it::class.java.getMethod("addURL", java.net.URL::class.java) + .invoke(it, javaRtJar.toURI().toURL()) + } + } catch (e: RuntimeException) { + logger.log(LogLevel.WARN, "Failed to load java-rt into Gradle daemon", e) + } + } + } + } + } +} \ No newline at end of file