Skip to content

Commit f9c341c

Browse files
Revert "Generate the AutoConfiguration.imports file from annotations"
This reverts commit da4de7d.
1 parent d62d7ca commit f9c341c

File tree

16 files changed

+344
-274
lines changed

16 files changed

+344
-274
lines changed

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

Lines changed: 58 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323
import java.io.FileWriter;
2424
import java.io.IOException;
2525
import java.io.InputStream;
26+
import java.io.InputStreamReader;
27+
import java.io.Reader;
28+
import java.util.ArrayList;
2629
import java.util.Collections;
2730
import java.util.LinkedHashSet;
2831
import java.util.List;
2932
import java.util.Properties;
3033
import java.util.Set;
3134
import java.util.concurrent.Callable;
32-
import java.util.stream.Collectors;
3335

3436
import org.gradle.api.DefaultTask;
3537
import org.gradle.api.Task;
@@ -41,26 +43,30 @@
4143
import org.springframework.asm.ClassReader;
4244
import org.springframework.asm.Opcodes;
4345
import org.springframework.core.CollectionFactory;
46+
import org.springframework.util.StringUtils;
4447

4548
/**
4649
* A {@link Task} for generating metadata describing a project's auto-configuration
4750
* classes.
4851
*
4952
* @author Andy Wilkinson
50-
* @author Scott Frederick
5153
*/
5254
public class AutoConfigurationMetadata extends DefaultTask {
5355

54-
private static final String IMPORTS_FILE_PATH = "META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports";
55-
5656
private static final String COMMENT_START = "#";
5757

5858
private SourceSet sourceSet;
5959

6060
private File outputFile;
6161

6262
public AutoConfigurationMetadata() {
63-
getInputs().file((Callable<File>) this::findAutoConfigurationImportsFile)
63+
getInputs()
64+
.file((Callable<File>) () -> new File(this.sourceSet.getOutput().getResourcesDir(),
65+
"META-INF/spring.factories"))
66+
.withPathSensitivity(PathSensitivity.RELATIVE).withPropertyName("spring.factories");
67+
getInputs()
68+
.file((Callable<File>) () -> new File(this.sourceSet.getOutput().getResourcesDir(),
69+
"META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports"))
6470
.withPathSensitivity(PathSensitivity.RELATIVE)
6571
.withPropertyName("org.springframework.boot.autoconfigure.AutoConfiguration");
6672

@@ -93,7 +99,9 @@ void documentAutoConfiguration() throws IOException {
9399

94100
private Properties readAutoConfiguration() throws IOException {
95101
Properties autoConfiguration = CollectionFactory.createSortedProperties(true);
96-
List<String> classNames = readAutoConfigurationsFile();
102+
Set<String> classNames = new LinkedHashSet<>();
103+
classNames.addAll(readSpringFactories());
104+
classNames.addAll(readAutoConfigurationsFile());
97105
Set<String> publicClassNames = new LinkedHashSet<>();
98106
for (String className : classNames) {
99107
File classFile = findClassFile(className);
@@ -112,46 +120,74 @@ private Properties readAutoConfiguration() throws IOException {
112120
return autoConfiguration;
113121
}
114122

123+
/**
124+
* Reads auto-configurations from META-INF/spring.factories.
125+
* @return auto-configurations
126+
*/
127+
private Set<String> readSpringFactories() throws IOException {
128+
File file = new File(this.sourceSet.getOutput().getResourcesDir(), "META-INF/spring.factories");
129+
if (!file.exists()) {
130+
return Collections.emptySet();
131+
}
132+
Properties springFactories = readSpringFactories(file);
133+
String enableAutoConfiguration = springFactories
134+
.getProperty("org.springframework.boot.autoconfigure.EnableAutoConfiguration");
135+
return StringUtils.commaDelimitedListToSet(enableAutoConfiguration);
136+
}
137+
115138
/**
116139
* Reads auto-configurations from
117140
* META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports.
118141
* @return auto-configurations
119142
*/
120143
private List<String> readAutoConfigurationsFile() throws IOException {
121-
File file = findAutoConfigurationImportsFile();
122-
if (file == null) {
144+
File file = new File(this.sourceSet.getOutput().getResourcesDir(),
145+
"META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports");
146+
if (!file.exists()) {
123147
return Collections.emptyList();
124148
}
125-
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
126-
return reader.lines().map(this::stripComment).filter((line) -> !line.isEmpty())
127-
.collect(Collectors.toList());
149+
// Nearly identical copy of
150+
// org.springframework.boot.context.annotation.ImportCandidates.load
151+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) {
152+
List<String> autoConfigurations = new ArrayList<>();
153+
String line;
154+
while ((line = reader.readLine()) != null) {
155+
line = stripComment(line);
156+
line = line.trim();
157+
if (line.isEmpty()) {
158+
continue;
159+
}
160+
autoConfigurations.add(line);
161+
}
162+
return autoConfigurations;
128163
}
129164
}
130165

131166
private String stripComment(String line) {
132167
int commentStart = line.indexOf(COMMENT_START);
133168
if (commentStart == -1) {
134-
return line.trim();
169+
return line;
135170
}
136-
return line.substring(0, commentStart).trim();
137-
}
138-
139-
private File findAutoConfigurationImportsFile() {
140-
return findFileInClassesDirs(IMPORTS_FILE_PATH);
171+
return line.substring(0, commentStart);
141172
}
142173

143174
private File findClassFile(String className) {
144-
return findFileInClassesDirs(className.replace(".", "/") + ".class");
145-
}
146-
147-
private File findFileInClassesDirs(String fileName) {
175+
String classFileName = className.replace(".", "/") + ".class";
148176
for (File classesDir : this.sourceSet.getOutput().getClassesDirs()) {
149-
File classFile = new File(classesDir, fileName);
177+
File classFile = new File(classesDir, classFileName);
150178
if (classFile.isFile()) {
151179
return classFile;
152180
}
153181
}
154182
return null;
155183
}
156184

185+
private Properties readSpringFactories(File file) throws IOException {
186+
Properties springFactories = new Properties();
187+
try (Reader in = new FileReader(file)) {
188+
springFactories.load(in);
189+
}
190+
return springFactories;
191+
}
192+
157193
}

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2022 the original author or authors.
2+
* Copyright 2012-2021 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.
@@ -18,6 +18,7 @@
1818

1919
import java.io.File;
2020
import java.util.Collections;
21+
import java.util.concurrent.Callable;
2122

2223
import org.gradle.api.Plugin;
2324
import org.gradle.api.Project;
@@ -42,7 +43,6 @@
4243
* </ul>
4344
*
4445
* @author Andy Wilkinson
45-
* @author Scott Frederick
4646
*/
4747
public class AutoConfigurationPlugin implements Plugin<Project> {
4848

@@ -57,24 +57,24 @@ public void apply(Project project) {
5757
project.getPlugins().apply(DeployedPlugin.class);
5858
project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> {
5959
project.getPlugins().apply(ConfigurationPropertiesPlugin.class);
60-
configureAutoConfigurationAnnotationProcessor(project);
60+
Configuration annotationProcessors = project.getConfigurations()
61+
.getByName(JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME);
62+
annotationProcessors.getDependencies()
63+
.add(project.getDependencies().project(Collections.singletonMap("path",
64+
":spring-boot-project:spring-boot-tools:spring-boot-autoconfigure-processor")));
65+
annotationProcessors.getDependencies()
66+
.add(project.getDependencies().project(Collections.singletonMap("path",
67+
":spring-boot-project:spring-boot-tools:spring-boot-configuration-processor")));
6168
project.getTasks().create("autoConfigurationMetadata", AutoConfigurationMetadata.class, (task) -> {
6269
SourceSet main = project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets()
6370
.getByName(SourceSet.MAIN_SOURCE_SET_NAME);
6471
task.setSourceSet(main);
6572
task.dependsOn(main.getClassesTaskName());
6673
task.setOutputFile(new File(project.getBuildDir(), "auto-configuration-metadata.properties"));
6774
project.getArtifacts().add(AutoConfigurationPlugin.AUTO_CONFIGURATION_METADATA_CONFIGURATION_NAME,
68-
project.provider(task::getOutputFile), (artifact) -> artifact.builtBy(task));
75+
project.provider((Callable<File>) task::getOutputFile), (artifact) -> artifact.builtBy(task));
6976
});
7077
});
7178
}
7279

73-
private void configureAutoConfigurationAnnotationProcessor(Project project) {
74-
Configuration annotationProcessors = project.getConfigurations()
75-
.getByName(JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME);
76-
annotationProcessors.getDependencies().add(project.getDependencies().project(Collections.singletonMap("path",
77-
":spring-boot-project:spring-boot-tools:spring-boot-autoconfigure-processor")));
78-
}
79-
8080
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
org.springframework.boot.actuate.autoconfigure.amqp.RabbitHealthContributorAutoConfiguration
2+
org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration
3+
org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration
4+
org.springframework.boot.actuate.autoconfigure.availability.AvailabilityHealthContributorAutoConfiguration
5+
org.springframework.boot.actuate.autoconfigure.availability.AvailabilityProbesAutoConfiguration
6+
org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration
7+
org.springframework.boot.actuate.autoconfigure.cache.CachesEndpointAutoConfiguration
8+
org.springframework.boot.actuate.autoconfigure.cassandra.CassandraHealthContributorAutoConfiguration
9+
org.springframework.boot.actuate.autoconfigure.cassandra.CassandraReactiveHealthContributorAutoConfiguration
10+
org.springframework.boot.actuate.autoconfigure.cloudfoundry.servlet.CloudFoundryActuatorAutoConfiguration
11+
org.springframework.boot.actuate.autoconfigure.cloudfoundry.reactive.ReactiveCloudFoundryActuatorAutoConfiguration
12+
org.springframework.boot.actuate.autoconfigure.condition.ConditionsReportEndpointAutoConfiguration
13+
org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointAutoConfiguration
14+
org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration
15+
org.springframework.boot.actuate.autoconfigure.couchbase.CouchbaseHealthContributorAutoConfiguration
16+
org.springframework.boot.actuate.autoconfigure.couchbase.CouchbaseReactiveHealthContributorAutoConfiguration
17+
org.springframework.boot.actuate.autoconfigure.data.elasticsearch.ElasticsearchReactiveHealthContributorAutoConfiguration
18+
org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticsearchRestHealthContributorAutoConfiguration
19+
org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration
20+
org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration
21+
org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration
22+
org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration
23+
org.springframework.boot.actuate.autoconfigure.flyway.FlywayEndpointAutoConfiguration
24+
org.springframework.boot.actuate.autoconfigure.hazelcast.HazelcastHealthContributorAutoConfiguration
25+
org.springframework.boot.actuate.autoconfigure.health.HealthContributorAutoConfiguration
26+
org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration
27+
org.springframework.boot.actuate.autoconfigure.influx.InfluxDbHealthContributorAutoConfiguration
28+
org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration
29+
org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration
30+
org.springframework.boot.actuate.autoconfigure.integration.IntegrationGraphEndpointAutoConfiguration
31+
org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthContributorAutoConfiguration
32+
org.springframework.boot.actuate.autoconfigure.jms.JmsHealthContributorAutoConfiguration
33+
org.springframework.boot.actuate.autoconfigure.ldap.LdapHealthContributorAutoConfiguration
34+
org.springframework.boot.actuate.autoconfigure.liquibase.LiquibaseEndpointAutoConfiguration
35+
org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointAutoConfiguration
36+
org.springframework.boot.actuate.autoconfigure.logging.LoggersEndpointAutoConfiguration
37+
org.springframework.boot.actuate.autoconfigure.mail.MailHealthContributorAutoConfiguration
38+
org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration
39+
org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration
40+
org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration
41+
org.springframework.boot.actuate.autoconfigure.metrics.JvmMetricsAutoConfiguration
42+
org.springframework.boot.actuate.autoconfigure.metrics.KafkaMetricsAutoConfiguration
43+
org.springframework.boot.actuate.autoconfigure.metrics.Log4J2MetricsAutoConfiguration
44+
org.springframework.boot.actuate.autoconfigure.metrics.LogbackMetricsAutoConfiguration
45+
org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration
46+
org.springframework.boot.actuate.autoconfigure.metrics.MetricsEndpointAutoConfiguration
47+
org.springframework.boot.actuate.autoconfigure.metrics.SystemMetricsAutoConfiguration
48+
org.springframework.boot.actuate.autoconfigure.metrics.amqp.RabbitMetricsAutoConfiguration
49+
org.springframework.boot.actuate.autoconfigure.metrics.cache.CacheMetricsAutoConfiguration
50+
org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration
51+
org.springframework.boot.actuate.autoconfigure.metrics.export.appoptics.AppOpticsMetricsExportAutoConfiguration
52+
org.springframework.boot.actuate.autoconfigure.metrics.export.atlas.AtlasMetricsExportAutoConfiguration
53+
org.springframework.boot.actuate.autoconfigure.metrics.export.datadog.DatadogMetricsExportAutoConfiguration
54+
org.springframework.boot.actuate.autoconfigure.metrics.export.dynatrace.DynatraceMetricsExportAutoConfiguration
55+
org.springframework.boot.actuate.autoconfigure.metrics.export.elastic.ElasticMetricsExportAutoConfiguration
56+
org.springframework.boot.actuate.autoconfigure.metrics.export.ganglia.GangliaMetricsExportAutoConfiguration
57+
org.springframework.boot.actuate.autoconfigure.metrics.export.graphite.GraphiteMetricsExportAutoConfiguration
58+
org.springframework.boot.actuate.autoconfigure.metrics.export.humio.HumioMetricsExportAutoConfiguration
59+
org.springframework.boot.actuate.autoconfigure.metrics.export.influx.InfluxMetricsExportAutoConfiguration
60+
org.springframework.boot.actuate.autoconfigure.metrics.export.jmx.JmxMetricsExportAutoConfiguration
61+
org.springframework.boot.actuate.autoconfigure.metrics.export.kairos.KairosMetricsExportAutoConfiguration
62+
org.springframework.boot.actuate.autoconfigure.metrics.export.newrelic.NewRelicMetricsExportAutoConfiguration
63+
org.springframework.boot.actuate.autoconfigure.metrics.export.otlp.OtlpMetricsExportAutoConfiguration
64+
org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration
65+
org.springframework.boot.actuate.autoconfigure.metrics.export.signalfx.SignalFxMetricsExportAutoConfiguration
66+
org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration
67+
org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver.StackdriverMetricsExportAutoConfiguration
68+
org.springframework.boot.actuate.autoconfigure.metrics.export.statsd.StatsdMetricsExportAutoConfiguration
69+
org.springframework.boot.actuate.autoconfigure.metrics.export.wavefront.WavefrontMetricsExportAutoConfiguration
70+
org.springframework.boot.actuate.autoconfigure.metrics.graphql.GraphQlMetricsAutoConfiguration
71+
org.springframework.boot.actuate.autoconfigure.metrics.integration.IntegrationMetricsAutoConfiguration
72+
org.springframework.boot.actuate.autoconfigure.metrics.jdbc.DataSourcePoolMetricsAutoConfiguration
73+
org.springframework.boot.actuate.autoconfigure.metrics.jersey.JerseyServerMetricsAutoConfiguration
74+
org.springframework.boot.actuate.autoconfigure.metrics.mongo.MongoMetricsAutoConfiguration
75+
org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration
76+
org.springframework.boot.actuate.autoconfigure.metrics.r2dbc.ConnectionPoolMetricsAutoConfiguration
77+
org.springframework.boot.actuate.autoconfigure.metrics.redis.LettuceMetricsAutoConfiguration
78+
org.springframework.boot.actuate.autoconfigure.metrics.startup.StartupTimeMetricsListenerAutoConfiguration
79+
org.springframework.boot.actuate.autoconfigure.metrics.task.TaskExecutorMetricsAutoConfiguration
80+
org.springframework.boot.actuate.autoconfigure.metrics.web.client.HttpClientMetricsAutoConfiguration
81+
org.springframework.boot.actuate.autoconfigure.metrics.web.jetty.JettyMetricsAutoConfiguration
82+
org.springframework.boot.actuate.autoconfigure.metrics.web.reactive.WebFluxMetricsAutoConfiguration
83+
org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration
84+
org.springframework.boot.actuate.autoconfigure.metrics.web.tomcat.TomcatMetricsAutoConfiguration
85+
org.springframework.boot.actuate.autoconfigure.data.mongo.MongoHealthContributorAutoConfiguration
86+
org.springframework.boot.actuate.autoconfigure.data.mongo.MongoReactiveHealthContributorAutoConfiguration
87+
org.springframework.boot.actuate.autoconfigure.neo4j.Neo4jHealthContributorAutoConfiguration
88+
org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration
89+
org.springframework.boot.actuate.autoconfigure.quartz.QuartzEndpointAutoConfiguration
90+
org.springframework.boot.actuate.autoconfigure.r2dbc.ConnectionFactoryHealthContributorAutoConfiguration
91+
org.springframework.boot.actuate.autoconfigure.data.redis.RedisHealthContributorAutoConfiguration
92+
org.springframework.boot.actuate.autoconfigure.data.redis.RedisReactiveHealthContributorAutoConfiguration
93+
org.springframework.boot.actuate.autoconfigure.scheduling.ScheduledTasksEndpointAutoConfiguration
94+
org.springframework.boot.actuate.autoconfigure.security.reactive.ReactiveManagementWebSecurityAutoConfiguration
95+
org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration
96+
org.springframework.boot.actuate.autoconfigure.session.SessionsEndpointAutoConfiguration
97+
org.springframework.boot.actuate.autoconfigure.startup.StartupEndpointAutoConfiguration
98+
org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthContributorAutoConfiguration
99+
org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceAutoConfiguration
100+
org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceEndpointAutoConfiguration
101+
org.springframework.boot.actuate.autoconfigure.tracing.BraveAutoConfiguration
102+
org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration
103+
org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration
104+
org.springframework.boot.actuate.autoconfigure.tracing.wavefront.WavefrontTracingAutoConfiguration
105+
org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinAutoConfiguration
106+
org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration
107+
org.springframework.boot.actuate.autoconfigure.web.reactive.ReactiveManagementContextAutoConfiguration
108+
org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration
109+
org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration

0 commit comments

Comments
 (0)