Browse Source

Split architecture checks by language as well as source set

Closes gh-48224
pull/48297/head
Andy Wilkinson 4 weeks ago
parent
commit
859606ae13
  1. 55
      buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitecturePlugin.java
  2. 2
      buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java
  3. 2
      spring-boot-project/spring-boot-tools/spring-boot-loader-classic/build.gradle
  4. 2
      spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle

55
buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitecturePlugin.java

@ -16,17 +16,15 @@ @@ -16,17 +16,15 @@
package org.springframework.boot.build.architecture;
import java.util.ArrayList;
import java.util.List;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.compile.JavaCompile;
import org.gradle.language.base.plugins.LifecycleBasePlugin;
import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTool;
import org.springframework.util.StringUtils;
@ -44,26 +42,39 @@ public class ArchitecturePlugin implements Plugin<Project> { @@ -44,26 +42,39 @@ public class ArchitecturePlugin implements Plugin<Project> {
private void registerTasks(Project project) {
JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class);
List<TaskProvider<ArchitectureCheck>> packageTangleChecks = new ArrayList<>();
for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) {
TaskProvider<ArchitectureCheck> checkPackageTangles = project.getTasks()
.register("checkArchitecture" + StringUtils.capitalize(sourceSet.getName()), ArchitectureCheck.class,
(task) -> {
task.getSourceSet().set(sourceSet.getName());
task.getCompileClasspath().from(sourceSet.getCompileClasspath());
task.setClasses(sourceSet.getOutput().getClassesDirs());
task.getResourcesDirectory().set(sourceSet.getOutput().getResourcesDir());
task.dependsOn(sourceSet.getProcessResourcesTaskName());
task.setDescription("Checks the architecture of the classes of the " + sourceSet.getName()
+ " source set.");
task.setGroup(LifecycleBasePlugin.VERIFICATION_GROUP);
});
packageTangleChecks.add(checkPackageTangles);
}
if (!packageTangleChecks.isEmpty()) {
TaskProvider<Task> checkTask = project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME);
checkTask.configure((check) -> check.dependsOn(packageTangleChecks));
registerArchitectureCheck(sourceSet, "java", project)
.configure((task) -> task.setClasses(project.files(project.getTasks()
.named(sourceSet.getCompileTaskName("java"), JavaCompile.class)
.flatMap((compile) -> compile.getDestinationDirectory()))));
project.getPlugins()
.withId("org.jetbrains.kotlin.jvm",
(kotlinPlugin) -> registerArchitectureCheck(sourceSet, "kotlin", project)
.configure((task) -> task.setClasses(project.files(project.getTasks()
.named(sourceSet.getCompileTaskName("kotlin"), KotlinCompileTool.class)
.flatMap((compile) -> compile.getDestinationDirectory())))));
}
}
private TaskProvider<ArchitectureCheck> registerArchitectureCheck(SourceSet sourceSet, String language,
Project project) {
TaskProvider<ArchitectureCheck> checkArchitecture = project.getTasks()
.register(
"checkArchitecture"
+ StringUtils.capitalize(sourceSet.getName() + StringUtils.capitalize(language)),
ArchitectureCheck.class, (task) -> {
task.getSourceSet().set(sourceSet.getName());
task.getCompileClasspath().from(sourceSet.getCompileClasspath());
task.getResourcesDirectory().set(sourceSet.getOutput().getResourcesDir());
task.dependsOn(sourceSet.getProcessResourcesTaskName());
task.setDescription("Checks the architecture of the " + language + " classes of the "
+ sourceSet.getName() + " source set.");
task.setGroup(LifecycleBasePlugin.VERIFICATION_GROUP);
});
project.getTasks()
.named(LifecycleBasePlugin.CHECK_TASK_NAME)
.configure((check) -> check.dependsOn(checkArchitecture));
return checkArchitecture;
}
}

2
buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java

@ -381,7 +381,7 @@ class ArchitectureCheckTests { @@ -381,7 +381,7 @@ class ArchitectureCheckTests {
@Override
public String toString() {
return "checkArchitecture" + StringUtils.capitalize(this.sourceSetName);
return "checkArchitecture" + StringUtils.capitalize(this.sourceSetName) + "Java";
}
}

2
spring-boot-project/spring-boot-tools/spring-boot-loader-classic/build.gradle

@ -38,7 +38,7 @@ dependencies { @@ -38,7 +38,7 @@ dependencies {
}
tasks.configureEach {
if ("checkArchitectureMain".equals(it.name)) {
if ("checkArchitectureMainJava".equals(it.name)) {
prohibitObjectsRequireNonNull = false
}
}

2
spring-boot-project/spring-boot-tools/spring-boot-loader/build.gradle

@ -38,7 +38,7 @@ dependencies { @@ -38,7 +38,7 @@ dependencies {
}
tasks.configureEach {
if ("checkArchitectureMain".equals(it.name)) {
if ("checkArchitectureMainJava".equals(it.name)) {
prohibitObjectsRequireNonNull = false
}
}

Loading…
Cancel
Save