From c6d66dc6ed63a92dc30e2a45a3ac957d34524ea9 Mon Sep 17 00:00:00 2001 From: Eric Haag Date: Mon, 23 Mar 2026 12:44:55 -0500 Subject: [PATCH 1/2] Improve Detekt task relocatability by relativizing basePath Configures the `basePath` on Detekt tasks to use a relative path from the root project. This prevents absolute paths from being used during analysis, avoiding cross-machine build cache misses and ensuring the task is fully relocatable. See: https://github.com/detekt/detekt/issues/7170 Signed-off-by: Eric Haag See gh-49937 --- .../boot/build/KotlinConventions.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java index 13517de6420..6bed7015cb2 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java @@ -17,6 +17,7 @@ package org.springframework.boot.build; import java.net.URI; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; @@ -107,7 +108,19 @@ class KotlinConventions { project.getPlugins().apply(DetektPlugin.class); DetektExtension detekt = project.getExtensions().getByType(DetektExtension.class); detekt.getConfig().setFrom(project.getRootProject().file("src/detekt/config.yml")); - project.getTasks().withType(Detekt.class).configureEach((task) -> task.setJvmTarget(JVM_TARGET)); + project.getTasks().withType(Detekt.class).configureEach((task) -> { + task.setJvmTarget(JVM_TARGET); + + // Relativize basePath to prevent build cache misses across different machines + // See: https://github.com/detekt/detekt/issues/7170 + task.setBasePath(getProjectPathRelativeToRootProject(task.getProject()).toString()); + }); + } + + private static Path getProjectPathRelativeToRootProject(Project project) { + Path rootProjectDirectory = project.getIsolated().getRootProject().getProjectDirectory().getAsFile().toPath(); + Path projectDirectory = project.getLayout().getProjectDirectory().getAsFile().toPath(); + return projectDirectory.relativize(rootProjectDirectory); } } From cf16beca406453854341d5693e500259e393bb8c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 7 Apr 2026 10:33:06 +0100 Subject: [PATCH 2/2] Polish "Improve Detekt task relocatability by relativizing basePath" See gh-49937 --- .../boot/build/KotlinConventions.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java index 6bed7015cb2..12d1f76aa15 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java @@ -110,14 +110,16 @@ class KotlinConventions { detekt.getConfig().setFrom(project.getRootProject().file("src/detekt/config.yml")); project.getTasks().withType(Detekt.class).configureEach((task) -> { task.setJvmTarget(JVM_TARGET); - - // Relativize basePath to prevent build cache misses across different machines - // See: https://github.com/detekt/detekt/issues/7170 - task.setBasePath(getProjectPathRelativeToRootProject(task.getProject()).toString()); + normalizeMachineSpecificDefaults(project, task); }); } - private static Path getProjectPathRelativeToRootProject(Project project) { + // See: https://github.com/detekt/detekt/issues/7170 + private void normalizeMachineSpecificDefaults(Project project, Detekt task) { + task.setBasePath(pathRelativeToRootProject(task.getProject()).toString()); + } + + private static Path pathRelativeToRootProject(Project project) { Path rootProjectDirectory = project.getIsolated().getRootProject().getProjectDirectory().getAsFile().toPath(); Path projectDirectory = project.getLayout().getProjectDirectory().getAsFile().toPath(); return projectDirectory.relativize(rootProjectDirectory);