diff --git a/build.gradle b/build.gradle index aafc2a68ef3..fd948265ae7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,4 @@ plugins { - id 'io.spring.nohttp' version '0.0.11' id 'io.freefair.aspectj' version '8.0.1' apply false // kotlinVersion is managed in gradle.properties id 'org.jetbrains.kotlin.plugin.serialization' version "${kotlinVersion}" apply false @@ -121,23 +120,5 @@ configure(moduleProjects) { project -> configure(rootProject) { description = "Spring Framework" - - apply plugin: "io.spring.nohttp" apply plugin: 'org.springframework.build.api-diff' - - nohttp { - source.exclude "**/test-output/**" - allowlistFile = project.file("src/nohttp/allowlist.lines") - def rootPath = file(rootDir).toPath() - def projectDirs = allprojects.collect { it.projectDir } + "${rootDir}/buildSrc" - projectDirs.forEach { dir -> - [ 'bin', 'build', 'out', '.settings' ] - .collect { rootPath.relativize(new File(dir, it).toPath()) } - .forEach { source.exclude "$it/**" } - [ '.classpath', '.project' ] - .collect { rootPath.relativize(new File(dir, it).toPath()) } - .forEach { source.exclude "$it" } - } - } - } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 34561436fb1..1d0ee25bdf9 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -20,11 +20,12 @@ ext { dependencies { checkstyle "io.spring.javaformat:spring-javaformat-checkstyle:${javaFormatVersion}" - implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") - implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable:${kotlinVersion}") + implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}" + implementation "org.jetbrains.kotlin:kotlin-compiler-embeddable:${kotlinVersion}" implementation "me.champeau.gradle:japicmp-gradle-plugin:0.3.0" implementation "org.gradle:test-retry-gradle-plugin:1.4.1" - implementation("io.spring.javaformat:spring-javaformat-gradle-plugin:${javaFormatVersion}") + implementation "io.spring.javaformat:spring-javaformat-gradle-plugin:${javaFormatVersion}" + implementation "io.spring.nohttp:nohttp-gradle:0.0.11" } gradlePlugin { diff --git a/buildSrc/src/main/java/org/springframework/build/CheckstyleConventions.java b/buildSrc/src/main/java/org/springframework/build/CheckstyleConventions.java index 3c3c84929fa..3bdd61d58f5 100644 --- a/buildSrc/src/main/java/org/springframework/build/CheckstyleConventions.java +++ b/buildSrc/src/main/java/org/springframework/build/CheckstyleConventions.java @@ -17,7 +17,8 @@ package org.springframework.build; import io.spring.javaformat.gradle.SpringJavaFormatPlugin; -import io.spring.javaformat.gradle.tasks.Format; +import io.spring.nohttp.gradle.NoHttpExtension; +import io.spring.nohttp.gradle.NoHttpPlugin; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.DependencySet; @@ -26,6 +27,9 @@ import org.gradle.api.plugins.quality.Checkstyle; import org.gradle.api.plugins.quality.CheckstyleExtension; import org.gradle.api.plugins.quality.CheckstylePlugin; +import java.nio.file.Path; +import java.util.List; + /** * {@link Plugin} that applies conventions for checkstyle. * @author Brian Clozel @@ -38,6 +42,9 @@ public class CheckstyleConventions { */ public void apply(Project project) { project.getPlugins().withType(JavaBasePlugin.class, (java) -> { + if (project.getRootProject() == project) { + configureNoHttpPlugin(project); + } project.getPlugins().apply(CheckstylePlugin.class); project.getTasks().withType(Checkstyle.class).forEach(checkstyle -> checkstyle.getMaxHeapSize().set("1g")); CheckstyleExtension checkstyle = project.getExtensions().getByType(CheckstyleExtension.class); @@ -50,4 +57,20 @@ public class CheckstyleConventions { }); } + private static void configureNoHttpPlugin(Project project) { + project.getPlugins().apply(NoHttpPlugin.class); + NoHttpExtension noHttp = project.getExtensions().getByType(NoHttpExtension.class); + noHttp.setAllowlistFile(project.file("src/nohttp/allowlist.lines")); + noHttp.getSource().exclude("**/test-output/**", "**/.settings/**", + "**/.classpath", "**/.project"); + List buildFolders = List.of("bin", "build", "out"); + project.allprojects(subproject -> { + Path rootPath = project.getRootDir().toPath(); + Path projectPath = rootPath.relativize(subproject.getProjectDir().toPath()); + for (String buildFolder : buildFolders) { + noHttp.getSource().exclude(projectPath.resolve(buildFolder).resolve("**").toString()); + } + }); + } + }