From 515abc4221145aa2d89cc745890fce9d3f57f5c6 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 9 Jun 2025 18:17:00 +0100 Subject: [PATCH] Include all auto-config modules in auto-config classes appendix Closes gh-45861 --- .../DocumentAutoConfigurationClasses.java | 53 +++++++++++++++++-- .../spring-boot-docs/build.gradle | 5 ++ .../antora/modules/ROOT/pages/redirect.adoc | 8 +-- .../auto-configuration-classes/actuator.adoc | 6 --- .../auto-configuration-classes/core.adoc | 6 --- .../appendix/partials/nav-appendix.adoc | 4 +- 6 files changed, 61 insertions(+), 21 deletions(-) delete mode 100644 spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/actuator.adoc delete mode 100644 spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/core.adoc diff --git a/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/DocumentAutoConfigurationClasses.java b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/DocumentAutoConfigurationClasses.java index f76682282e1..5c1fd4debbf 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/DocumentAutoConfigurationClasses.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/DocumentAutoConfigurationClasses.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,8 @@ import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.Reader; +import java.io.UncheckedIOException; +import java.util.List; import java.util.Properties; import java.util.Set; import java.util.SortedSet; @@ -61,6 +63,8 @@ public abstract class DocumentAutoConfigurationClasses extends DefaultTask { @TaskAction void documentAutoConfigurationClasses() throws IOException { + List autoConfigurations = load(); + autoConfigurations.forEach(this::writeModuleAdoc); for (File metadataFile : this.autoConfiguration) { Properties metadata = new Properties(); try (Reader reader = new FileReader(metadataFile)) { @@ -68,15 +72,30 @@ public abstract class DocumentAutoConfigurationClasses extends DefaultTask { } AutoConfiguration autoConfiguration = new AutoConfiguration(metadata.getProperty("module"), new TreeSet<>( StringUtils.commaDelimitedListToSet(metadata.getProperty("autoConfigurationClassNames")))); - writeTable(autoConfiguration); + writeModuleAdoc(autoConfiguration); } + writeNavAdoc(autoConfigurations); } - private void writeTable(AutoConfiguration autoConfigurationClasses) throws IOException { + private List load() { + return this.autoConfiguration.getFiles() + .stream() + .map(AutoConfiguration::of) + .sorted((a1, a2) -> a1.module.compareTo(a2.module)) + .toList(); + } + + private void writeModuleAdoc(AutoConfiguration autoConfigurationClasses) { File outputDir = getOutputDir().getAsFile().get(); outputDir.mkdirs(); try (PrintWriter writer = new PrintWriter( new FileWriter(new File(outputDir, autoConfigurationClasses.module + ".adoc")))) { + writer.println("[[appendix.auto-configuration-classes.%s]]".formatted(autoConfigurationClasses.module)); + writer.println("= %s".formatted(autoConfigurationClasses.module)); + writer.println(); + writer.println("The following auto-configuration classes are from the `%s` module:" + .formatted(autoConfigurationClasses.module)); + writer.println(); writer.println("[cols=\"4,1\"]"); writer.println("|==="); writer.println("| Configuration Class | Links"); @@ -88,6 +107,22 @@ public abstract class DocumentAutoConfigurationClasses extends DefaultTask { } writer.println("|==="); } + catch (IOException ex) { + throw new UncheckedIOException(ex); + } + } + + private void writeNavAdoc(List autoConfigurations) { + File outputDir = getOutputDir().getAsFile().get(); + outputDir.mkdirs(); + try (PrintWriter writer = new PrintWriter(new FileWriter(new File(outputDir, "nav.adoc")))) { + autoConfigurations.forEach((autoConfigurationClasses) -> writer + .println("*** xref:appendix:auto-configuration-classes/%s.adoc[]" + .formatted(autoConfigurationClasses.module))); + } + catch (IOException ex) { + throw new UncheckedIOException(ex); + } } private static final class AutoConfiguration { @@ -105,6 +140,18 @@ public abstract class DocumentAutoConfigurationClasses extends DefaultTask { }).collect(Collectors.toCollection(TreeSet::new)); } + private static AutoConfiguration of(File metadataFile) { + Properties metadata = new Properties(); + try (Reader reader = new FileReader(metadataFile)) { + metadata.load(reader); + } + catch (IOException ex) { + throw new UncheckedIOException(ex); + } + return new AutoConfiguration(metadata.getProperty("module"), new TreeSet<>( + StringUtils.commaDelimitedListToSet(metadata.getProperty("autoConfigurationClassNames")))); + } + } private static final class AutoConfigurationClass implements Comparable { diff --git a/spring-boot-project/spring-boot-docs/build.gradle b/spring-boot-project/spring-boot-docs/build.gradle index 7f96367302f..7a02df91f11 100644 --- a/spring-boot-project/spring-boot-docs/build.gradle +++ b/spring-boot-project/spring-boot-docs/build.gradle @@ -370,6 +370,11 @@ antoraContributions { } from(documentAutoConfigurationClasses) { into "modules/appendix/partials/auto-configuration-classes" + include "nav.adoc" + } + from(documentAutoConfigurationClasses) { + into "modules/appendix/pages/auto-configuration-classes" + exclude "nav.adoc" } from(documentConfigurationProperties) { into "modules/appendix/partials/configuration-properties" diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/ROOT/pages/redirect.adoc b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/ROOT/pages/redirect.adoc index ec4127f1ae3..9765d775acd 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/ROOT/pages/redirect.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/ROOT/pages/redirect.adoc @@ -234,10 +234,10 @@ * xref:appendix:application-properties/index.adoc#appendix.application-properties[#common-application-properties] * xref:appendix:application-properties/index.adoc[#application-properties] * xref:appendix:application-properties/index.adoc[application-properties] -* xref:appendix:auto-configuration-classes/actuator.adoc#appendix.auto-configuration-classes.actuator[#appendix.auto-configuration-classes.actuator] -* xref:appendix:auto-configuration-classes/actuator.adoc#appendix.auto-configuration-classes.actuator[#auto-configuration-classes.actuator] -* xref:appendix:auto-configuration-classes/core.adoc#appendix.auto-configuration-classes.core[#appendix.auto-configuration-classes.core] -* xref:appendix:auto-configuration-classes/core.adoc#appendix.auto-configuration-classes.core[#auto-configuration-classes.core] +* xref:appendix:auto-configuration-classes/spring-boot-actuator-autoconfigure.adoc#appendix.auto-configuration-classes.spring-boot-actuator-autoconfigure[#appendix.auto-configuration-classes.actuator] +* xref:appendix:auto-configuration-classes/spring-boot-actuator-autoconfigure.adoc#appendix.auto-configuration-classes.spring-boot-actuator-autoconfigure[#auto-configuration-classes.actuator] +* xref:appendix:auto-configuration-classes/spring-boot-autoconfigure.adoc#appendix.auto-configuration-classes.spring-boot-autoconfigure[#appendix.auto-configuration-classes.core] +* xref:appendix:auto-configuration-classes/spring-boot-autoconfigure.adoc#appendix.auto-configuration-classes.spring-boot-autoconfigure[#auto-configuration-classes.core] * xref:appendix:auto-configuration-classes/index.adoc#appendix.auto-configuration-classes[#appendix.auto-configuration-classes] * xref:appendix:auto-configuration-classes/index.adoc#appendix.auto-configuration-classes[#auto-configuration-classes] * xref:appendix:auto-configuration-classes/index.adoc[#auto-configuration-classes] diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/actuator.adoc b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/actuator.adoc deleted file mode 100644 index 620c7ea6989..00000000000 --- a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/actuator.adoc +++ /dev/null @@ -1,6 +0,0 @@ -[[appendix.auto-configuration-classes.actuator]] -= spring-boot-actuator-autoconfigure - -The following auto-configuration classes are from the `spring-boot-actuator-autoconfigure` module: - -include::partial$/auto-configuration-classes/spring-boot-actuator-autoconfigure.adoc[] diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/core.adoc b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/core.adoc deleted file mode 100644 index 53ec8859ad9..00000000000 --- a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/core.adoc +++ /dev/null @@ -1,6 +0,0 @@ -[[appendix.auto-configuration-classes.core]] -= spring-boot-autoconfigure - -The following auto-configuration classes are from the `spring-boot-autoconfigure` module: - -include::partial$/auto-configuration-classes/spring-boot-autoconfigure.adoc[] diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/partials/nav-appendix.adoc b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/partials/nav-appendix.adoc index 564da76c9c7..2d1c53173d3 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/partials/nav-appendix.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/partials/nav-appendix.adoc @@ -1,9 +1,9 @@ * Appendix ** xref:appendix:application-properties/index.adoc[] + ** xref:appendix:auto-configuration-classes/index.adoc[] -*** xref:appendix:auto-configuration-classes/core.adoc[] -*** xref:appendix:auto-configuration-classes/actuator.adoc[] +include::appendix:partial$auto-configuration-classes/nav.adoc[] ** xref:appendix:test-auto-configuration/index.adoc[] *** xref:appendix:test-auto-configuration/slices.adoc[]