Skip to content

Commit 515abc4

Browse files
committed
Include all auto-config modules in auto-config classes appendix
Closes gh-45861
1 parent 58a9119 commit 515abc4

File tree

6 files changed

+61
-21
lines changed

6 files changed

+61
-21
lines changed

buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/DocumentAutoConfigurationClasses.java

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2024 the original author or authors.
2+
* Copyright 2012-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -22,6 +22,8 @@
2222
import java.io.IOException;
2323
import java.io.PrintWriter;
2424
import java.io.Reader;
25+
import java.io.UncheckedIOException;
26+
import java.util.List;
2527
import java.util.Properties;
2628
import java.util.Set;
2729
import java.util.SortedSet;
@@ -61,22 +63,39 @@ public void setAutoConfiguration(FileCollection autoConfiguration) {
6163

6264
@TaskAction
6365
void documentAutoConfigurationClasses() throws IOException {
66+
List<AutoConfiguration> autoConfigurations = load();
67+
autoConfigurations.forEach(this::writeModuleAdoc);
6468
for (File metadataFile : this.autoConfiguration) {
6569
Properties metadata = new Properties();
6670
try (Reader reader = new FileReader(metadataFile)) {
6771
metadata.load(reader);
6872
}
6973
AutoConfiguration autoConfiguration = new AutoConfiguration(metadata.getProperty("module"), new TreeSet<>(
7074
StringUtils.commaDelimitedListToSet(metadata.getProperty("autoConfigurationClassNames"))));
71-
writeTable(autoConfiguration);
75+
writeModuleAdoc(autoConfiguration);
7276
}
77+
writeNavAdoc(autoConfigurations);
7378
}
7479

75-
private void writeTable(AutoConfiguration autoConfigurationClasses) throws IOException {
80+
private List<AutoConfiguration> load() {
81+
return this.autoConfiguration.getFiles()
82+
.stream()
83+
.map(AutoConfiguration::of)
84+
.sorted((a1, a2) -> a1.module.compareTo(a2.module))
85+
.toList();
86+
}
87+
88+
private void writeModuleAdoc(AutoConfiguration autoConfigurationClasses) {
7689
File outputDir = getOutputDir().getAsFile().get();
7790
outputDir.mkdirs();
7891
try (PrintWriter writer = new PrintWriter(
7992
new FileWriter(new File(outputDir, autoConfigurationClasses.module + ".adoc")))) {
93+
writer.println("[[appendix.auto-configuration-classes.%s]]".formatted(autoConfigurationClasses.module));
94+
writer.println("= %s".formatted(autoConfigurationClasses.module));
95+
writer.println();
96+
writer.println("The following auto-configuration classes are from the `%s` module:"
97+
.formatted(autoConfigurationClasses.module));
98+
writer.println();
8099
writer.println("[cols=\"4,1\"]");
81100
writer.println("|===");
82101
writer.println("| Configuration Class | Links");
@@ -88,6 +107,22 @@ private void writeTable(AutoConfiguration autoConfigurationClasses) throws IOExc
88107
}
89108
writer.println("|===");
90109
}
110+
catch (IOException ex) {
111+
throw new UncheckedIOException(ex);
112+
}
113+
}
114+
115+
private void writeNavAdoc(List<AutoConfiguration> autoConfigurations) {
116+
File outputDir = getOutputDir().getAsFile().get();
117+
outputDir.mkdirs();
118+
try (PrintWriter writer = new PrintWriter(new FileWriter(new File(outputDir, "nav.adoc")))) {
119+
autoConfigurations.forEach((autoConfigurationClasses) -> writer
120+
.println("*** xref:appendix:auto-configuration-classes/%s.adoc[]"
121+
.formatted(autoConfigurationClasses.module)));
122+
}
123+
catch (IOException ex) {
124+
throw new UncheckedIOException(ex);
125+
}
91126
}
92127

93128
private static final class AutoConfiguration {
@@ -105,6 +140,18 @@ private AutoConfiguration(String module, Set<String> classNames) {
105140
}).collect(Collectors.toCollection(TreeSet::new));
106141
}
107142

143+
private static AutoConfiguration of(File metadataFile) {
144+
Properties metadata = new Properties();
145+
try (Reader reader = new FileReader(metadataFile)) {
146+
metadata.load(reader);
147+
}
148+
catch (IOException ex) {
149+
throw new UncheckedIOException(ex);
150+
}
151+
return new AutoConfiguration(metadata.getProperty("module"), new TreeSet<>(
152+
StringUtils.commaDelimitedListToSet(metadata.getProperty("autoConfigurationClassNames"))));
153+
}
154+
108155
}
109156

110157
private static final class AutoConfigurationClass implements Comparable<AutoConfigurationClass> {

spring-boot-project/spring-boot-docs/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,11 @@ antoraContributions {
370370
}
371371
from(documentAutoConfigurationClasses) {
372372
into "modules/appendix/partials/auto-configuration-classes"
373+
include "nav.adoc"
374+
}
375+
from(documentAutoConfigurationClasses) {
376+
into "modules/appendix/pages/auto-configuration-classes"
377+
exclude "nav.adoc"
373378
}
374379
from(documentConfigurationProperties) {
375380
into "modules/appendix/partials/configuration-properties"

spring-boot-project/spring-boot-docs/src/docs/antora/modules/ROOT/pages/redirect.adoc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,10 @@
234234
* xref:appendix:application-properties/index.adoc#appendix.application-properties[#common-application-properties]
235235
* xref:appendix:application-properties/index.adoc[#application-properties]
236236
* xref:appendix:application-properties/index.adoc[application-properties]
237-
* xref:appendix:auto-configuration-classes/actuator.adoc#appendix.auto-configuration-classes.actuator[#appendix.auto-configuration-classes.actuator]
238-
* xref:appendix:auto-configuration-classes/actuator.adoc#appendix.auto-configuration-classes.actuator[#auto-configuration-classes.actuator]
239-
* xref:appendix:auto-configuration-classes/core.adoc#appendix.auto-configuration-classes.core[#appendix.auto-configuration-classes.core]
240-
* xref:appendix:auto-configuration-classes/core.adoc#appendix.auto-configuration-classes.core[#auto-configuration-classes.core]
237+
* xref:appendix:auto-configuration-classes/spring-boot-actuator-autoconfigure.adoc#appendix.auto-configuration-classes.spring-boot-actuator-autoconfigure[#appendix.auto-configuration-classes.actuator]
238+
* xref:appendix:auto-configuration-classes/spring-boot-actuator-autoconfigure.adoc#appendix.auto-configuration-classes.spring-boot-actuator-autoconfigure[#auto-configuration-classes.actuator]
239+
* xref:appendix:auto-configuration-classes/spring-boot-autoconfigure.adoc#appendix.auto-configuration-classes.spring-boot-autoconfigure[#appendix.auto-configuration-classes.core]
240+
* xref:appendix:auto-configuration-classes/spring-boot-autoconfigure.adoc#appendix.auto-configuration-classes.spring-boot-autoconfigure[#auto-configuration-classes.core]
241241
* xref:appendix:auto-configuration-classes/index.adoc#appendix.auto-configuration-classes[#appendix.auto-configuration-classes]
242242
* xref:appendix:auto-configuration-classes/index.adoc#appendix.auto-configuration-classes[#auto-configuration-classes]
243243
* xref:appendix:auto-configuration-classes/index.adoc[#auto-configuration-classes]

spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/actuator.adoc

Lines changed: 0 additions & 6 deletions
This file was deleted.

spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/pages/auto-configuration-classes/core.adoc

Lines changed: 0 additions & 6 deletions
This file was deleted.

spring-boot-project/spring-boot-docs/src/docs/antora/modules/appendix/partials/nav-appendix.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
* Appendix
22
33
** xref:appendix:application-properties/index.adoc[]
4+
45
** xref:appendix:auto-configuration-classes/index.adoc[]
5-
*** xref:appendix:auto-configuration-classes/core.adoc[]
6-
*** xref:appendix:auto-configuration-classes/actuator.adoc[]
6+
include::appendix:partial$auto-configuration-classes/nav.adoc[]
77

88
** xref:appendix:test-auto-configuration/index.adoc[]
99
*** xref:appendix:test-auto-configuration/slices.adoc[]

0 commit comments

Comments
 (0)