Skip to content

Commit d8a9ebd

Browse files
committed
Upgrade to Gradle 8.12
Closes gh-43649
1 parent 734040a commit d8a9ebd

File tree

20 files changed

+249
-222
lines changed

20 files changed

+249
-222
lines changed

build.gradle

+7-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ description = "Spring Boot Build"
88
defaultTasks 'build'
99

1010
allprojects {
11-
group "org.springframework.boot"
11+
group = "org.springframework.boot"
1212
}
1313

1414
subprojects {
@@ -18,10 +18,14 @@ subprojects {
1818
mavenCentral()
1919
spring.mavenRepositories()
2020
if (version.contains('-')) {
21-
maven { url "https://repo.spring.io/milestone" }
21+
maven {
22+
url = "https://repo.spring.io/milestone"
23+
}
2224
}
2325
if (version.endsWith('-SNAPSHOT')) {
24-
maven { url "https://repo.spring.io/snapshot" }
26+
maven {
27+
url = "https://repo.spring.io/snapshot"
28+
}
2529
}
2630
}
2731

buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java

+21-20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2023-2024 the original author or authors.
2+
* Copyright 2023-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.
@@ -41,6 +41,7 @@
4141
import org.gradle.api.provider.Provider;
4242
import org.gradle.api.tasks.Copy;
4343
import org.gradle.api.tasks.TaskContainer;
44+
import org.gradle.api.tasks.TaskProvider;
4445

4546
import org.springframework.boot.build.antora.AntoraAsciidocAttributes;
4647
import org.springframework.boot.build.antora.GenerateAntoraPlaybook;
@@ -75,16 +76,16 @@ void apply(Project project) {
7576
}
7677

7778
private void apply(Project project, AntoraPlugin antoraPlugin) {
78-
ExtractVersionConstraints dependencyVersionsTask = addDependencyVersionsTask(project);
79+
TaskProvider<ExtractVersionConstraints> dependencyVersionsTask = addDependencyVersionsTask(project);
7980
project.getPlugins().apply(GenerateAntoraYmlPlugin.class);
8081
TaskContainer tasks = project.getTasks();
81-
GenerateAntoraPlaybook generateAntoraPlaybookTask = tasks.create(GENERATE_ANTORA_PLAYBOOK_TASK_NAME,
82-
GenerateAntoraPlaybook.class);
83-
configureGenerateAntoraPlaybookTask(project, generateAntoraPlaybookTask);
84-
Copy copyAntoraPackageJsonTask = tasks.create("copyAntoraPackageJson", Copy.class);
85-
configureCopyAntoraPackageJsonTask(project, copyAntoraPackageJsonTask);
86-
NpmInstallTask npmInstallTask = tasks.create("antoraNpmInstall", NpmInstallTask.class);
87-
configureNpmInstallTask(project, npmInstallTask, copyAntoraPackageJsonTask);
82+
TaskProvider<GenerateAntoraPlaybook> generateAntoraPlaybookTask = tasks.register(
83+
GENERATE_ANTORA_PLAYBOOK_TASK_NAME, GenerateAntoraPlaybook.class,
84+
(task) -> configureGenerateAntoraPlaybookTask(project, task));
85+
TaskProvider<Copy> copyAntoraPackageJsonTask = tasks.register("copyAntoraPackageJson", Copy.class,
86+
(task) -> configureCopyAntoraPackageJsonTask(project, task));
87+
TaskProvider<NpmInstallTask> npmInstallTask = tasks.register("antoraNpmInstall", NpmInstallTask.class,
88+
(task) -> configureNpmInstallTask(project, task, copyAntoraPackageJsonTask));
8889
tasks.withType(GenerateAntoraYmlTask.class, (generateAntoraYmlTask) -> configureGenerateAntoraYmlTask(project,
8990
generateAntoraYmlTask, dependencyVersionsTask));
9091
tasks.withType(AntoraTask.class,
@@ -106,7 +107,8 @@ private void configureCopyAntoraPackageJsonTask(Project project, Copy copyAntora
106107
.into(getNodeProjectDir(project));
107108
}
108109

109-
private void configureNpmInstallTask(Project project, NpmInstallTask npmInstallTask, Copy copyAntoraPackageJson) {
110+
private void configureNpmInstallTask(Project project, NpmInstallTask npmInstallTask,
111+
TaskProvider<Copy> copyAntoraPackageJson) {
110112
npmInstallTask.dependsOn(copyAntoraPackageJson);
111113
Map<String, String> environment = new HashMap<>();
112114
environment.put("npm_config_omit", "optional");
@@ -115,14 +117,14 @@ private void configureNpmInstallTask(Project project, NpmInstallTask npmInstallT
115117
npmInstallTask.getNpmCommand().set(List.of("ci", "--silent", "--no-progress"));
116118
}
117119

118-
private ExtractVersionConstraints addDependencyVersionsTask(Project project) {
120+
private TaskProvider<ExtractVersionConstraints> addDependencyVersionsTask(Project project) {
119121
return project.getTasks()
120-
.create("dependencyVersions", ExtractVersionConstraints.class,
122+
.register("dependencyVersions", ExtractVersionConstraints.class,
121123
(task) -> task.enforcedPlatform(DEPENDENCIES_PATH));
122124
}
123125

124126
private void configureGenerateAntoraYmlTask(Project project, GenerateAntoraYmlTask generateAntoraYmlTask,
125-
ExtractVersionConstraints dependencyVersionsTask) {
127+
TaskProvider<ExtractVersionConstraints> dependencyVersionsTask) {
126128
generateAntoraYmlTask.getOutputs().doNotCacheIf("getAsciidocAttributes() changes output", (task) -> true);
127129
generateAntoraYmlTask.dependsOn(dependencyVersionsTask);
128130
generateAntoraYmlTask.setProperty("componentName", "boot");
@@ -149,17 +151,16 @@ private void configureGenerateAntoraYmlTask(Project project, GenerateAntoraYmlTa
149151
}
150152

151153
private Provider<Map<String, String>> getAsciidocAttributes(Project project,
152-
ExtractVersionConstraints dependencyVersionsTask) {
153-
return project.provider(() -> {
154+
TaskProvider<ExtractVersionConstraints> dependencyVersionsTask) {
155+
return dependencyVersionsTask.map((task) -> task.getVersionConstraints()).map((constraints) -> {
154156
BomExtension bom = (BomExtension) project.project(DEPENDENCIES_PATH).getExtensions().getByName("bom");
155-
Map<String, String> dependencyVersions = dependencyVersionsTask.getVersionConstraints();
156-
AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes(project, bom, dependencyVersions);
157-
return attributes.get();
157+
return new AntoraAsciidocAttributes(project, bom, constraints).get();
158158
});
159159
}
160160

161-
private void configureAntoraTask(Project project, AntoraTask antoraTask, NpmInstallTask npmInstallTask,
162-
GenerateAntoraPlaybook generateAntoraPlaybookTask) {
161+
private void configureAntoraTask(Project project, AntoraTask antoraTask,
162+
TaskProvider<NpmInstallTask> npmInstallTask,
163+
TaskProvider<GenerateAntoraPlaybook> generateAntoraPlaybookTask) {
163164
antoraTask.setGroup("Documentation");
164165
antoraTask.dependsOn(npmInstallTask, generateAntoraPlaybookTask);
165166
antoraTask.setPlaybook("antora-playbook.yml");

buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java

+12-10
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.
@@ -44,6 +44,7 @@
4444
import org.gradle.api.plugins.quality.CheckstylePlugin;
4545
import org.gradle.api.tasks.SourceSet;
4646
import org.gradle.api.tasks.SourceSetContainer;
47+
import org.gradle.api.tasks.TaskProvider;
4748
import org.gradle.api.tasks.bundling.Jar;
4849
import org.gradle.api.tasks.compile.JavaCompile;
4950
import org.gradle.api.tasks.javadoc.Javadoc;
@@ -126,11 +127,12 @@ void apply(Project project) {
126127
}
127128

128129
private void configureJarManifestConventions(Project project) {
129-
ExtractResources extractLegalResources = project.getTasks()
130-
.create("extractLegalResources", ExtractResources.class);
131-
extractLegalResources.getDestinationDirectory().set(project.getLayout().getBuildDirectory().dir("legal"));
132-
extractLegalResources.getResourceNames().set(Arrays.asList("LICENSE.txt", "NOTICE.txt"));
133-
extractLegalResources.getProperties().put("version", project.getVersion().toString());
130+
TaskProvider<ExtractResources> extractLegalResources = project.getTasks()
131+
.register("extractLegalResources", ExtractResources.class, (task) -> {
132+
task.getDestinationDirectory().set(project.getLayout().getBuildDirectory().dir("legal"));
133+
task.getResourceNames().set(Arrays.asList("LICENSE.txt", "NOTICE.txt"));
134+
task.getProperties().put("version", project.getVersion().toString());
135+
});
134136
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
135137
Set<String> sourceJarTaskNames = sourceSets.stream()
136138
.map(SourceSet::getSourcesJarTaskName)
@@ -295,10 +297,10 @@ private void createProhibitedDependenciesChecks(Project project, String... confi
295297
}
296298

297299
private void createProhibitedDependenciesCheck(Configuration classpath, Project project) {
298-
CheckClasspathForProhibitedDependencies checkClasspathForProhibitedDependencies = project.getTasks()
299-
.create("check" + StringUtils.capitalize(classpath.getName() + "ForProhibitedDependencies"),
300-
CheckClasspathForProhibitedDependencies.class);
301-
checkClasspathForProhibitedDependencies.setClasspath(classpath);
300+
TaskProvider<CheckClasspathForProhibitedDependencies> checkClasspathForProhibitedDependencies = project
301+
.getTasks()
302+
.register("check" + StringUtils.capitalize(classpath.getName() + "ForProhibitedDependencies"),
303+
CheckClasspathForProhibitedDependencies.class, (task) -> task.setClasspath(classpath));
302304
project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkClasspathForProhibitedDependencies);
303305
}
304306

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

+2-2
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.
@@ -86,7 +86,7 @@ public void apply(Project project) {
8686
.add(project.getDependencies()
8787
.project(Collections.singletonMap("path",
8888
":spring-boot-project:spring-boot-tools:spring-boot-configuration-processor")));
89-
project.getTasks().create("autoConfigurationMetadata", AutoConfigurationMetadata.class, (task) -> {
89+
project.getTasks().register("autoConfigurationMetadata", AutoConfigurationMetadata.class, (task) -> {
9090
SourceSet main = project.getExtensions()
9191
.getByType(JavaPluginExtension.class)
9292
.getSourceSets()

buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java

+35-30
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.
@@ -54,6 +54,7 @@
5454
import org.gradle.api.publish.maven.tasks.GenerateMavenPom;
5555
import org.gradle.api.tasks.Sync;
5656
import org.gradle.api.tasks.TaskExecutionException;
57+
import org.gradle.api.tasks.TaskProvider;
5758
import org.w3c.dom.Document;
5859
import org.w3c.dom.NodeList;
5960

@@ -134,52 +135,56 @@ public void effectiveBomArtifact() {
134135
this.project.getTasks()
135136
.matching((task) -> task.getName().equals(DeployedPlugin.GENERATE_POM_TASK_NAME))
136137
.all((task) -> {
137-
Sync syncBom = this.project.getTasks().create("syncBom", Sync.class);
138-
syncBom.dependsOn(task);
139138
File generatedBomDir = this.project.getLayout()
140139
.getBuildDirectory()
141140
.dir("generated/bom")
142141
.get()
143142
.getAsFile();
144-
syncBom.setDestinationDir(generatedBomDir);
145-
syncBom.from(((GenerateMavenPom) task).getDestination(), (pom) -> pom.rename((name) -> "pom.xml"));
146-
try {
147-
String settingsXmlContent = FileCopyUtils
148-
.copyToString(new InputStreamReader(
149-
getClass().getClassLoader().getResourceAsStream("effective-bom-settings.xml"),
150-
StandardCharsets.UTF_8))
151-
.replace("localRepositoryPath",
152-
this.project.getLayout()
153-
.getBuildDirectory()
154-
.dir("local-m2-repository")
155-
.get()
156-
.getAsFile()
157-
.getAbsolutePath());
158-
syncBom.from(this.project.getResources().getText().fromString(settingsXmlContent),
143+
TaskProvider<Sync> syncBom = this.project.getTasks().register("syncBom", Sync.class, (sync) -> {
144+
sync.dependsOn(task);
145+
sync.setDestinationDir(generatedBomDir);
146+
sync.from(((GenerateMavenPom) task).getDestination(), (pom) -> pom.rename((name) -> "pom.xml"));
147+
sync.from(this.project.getResources().getText().fromString(loadSettingsXml()),
159148
(settingsXml) -> settingsXml.rename((name) -> "settings.xml"));
160-
}
161-
catch (IOException ex) {
162-
throw new GradleException("Failed to prepare settings.xml", ex);
163-
}
164-
MavenExec generateEffectiveBom = this.project.getTasks()
165-
.create("generateEffectiveBom", MavenExec.class);
166-
generateEffectiveBom.getProjectDir().set(generatedBomDir);
149+
});
167150
File effectiveBom = this.project.getLayout()
168151
.getBuildDirectory()
169152
.file("generated/effective-bom/" + this.project.getName() + "-effective-bom.xml")
170153
.get()
171154
.getAsFile();
172-
generateEffectiveBom.args("--settings", "settings.xml", "help:effective-pom",
173-
"-Doutput=" + effectiveBom);
174-
generateEffectiveBom.dependsOn(syncBom);
175-
generateEffectiveBom.getOutputs().file(effectiveBom);
176-
generateEffectiveBom.doLast(new StripUnrepeatableOutputAction(effectiveBom));
155+
TaskProvider<MavenExec> generateEffectiveBom = this.project.getTasks()
156+
.register("generateEffectiveBom", MavenExec.class, (maven) -> {
157+
maven.getProjectDir().set(generatedBomDir);
158+
maven.args("--settings", "settings.xml", "help:effective-pom", "-Doutput=" + effectiveBom);
159+
maven.dependsOn(syncBom);
160+
maven.getOutputs().file(effectiveBom);
161+
maven.doLast(new StripUnrepeatableOutputAction(effectiveBom));
162+
});
177163
this.project.getArtifacts()
178164
.add(effectiveBomConfiguration.getName(), effectiveBom,
179165
(artifact) -> artifact.builtBy(generateEffectiveBom));
180166
});
181167
}
182168

169+
private String loadSettingsXml() {
170+
try {
171+
return FileCopyUtils
172+
.copyToString(new InputStreamReader(
173+
getClass().getClassLoader().getResourceAsStream("effective-bom-settings.xml"),
174+
StandardCharsets.UTF_8))
175+
.replace("localRepositoryPath",
176+
this.project.getLayout()
177+
.getBuildDirectory()
178+
.dir("local-m2-repository")
179+
.get()
180+
.getAsFile()
181+
.getAbsolutePath());
182+
}
183+
catch (IOException ex) {
184+
throw new GradleException("Failed to prepare settings.xml", ex);
185+
}
186+
}
187+
183188
private String createDependencyNotation(String groupId, String artifactId, DependencyVersion version) {
184189
return groupId + ":" + artifactId + ":" + version;
185190
}

buildSrc/src/main/java/org/springframework/boot/build/bom/BomPlugin.java

+5-4
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.
@@ -32,6 +32,7 @@
3232
import org.gradle.api.publish.PublishingExtension;
3333
import org.gradle.api.publish.maven.MavenPom;
3434
import org.gradle.api.publish.maven.MavenPublication;
35+
import org.gradle.api.tasks.TaskProvider;
3536

3637
import org.springframework.boot.build.DeployedPlugin;
3738
import org.springframework.boot.build.MavenRepositoryPlugin;
@@ -61,10 +62,10 @@ public void apply(Project project) {
6162
javaPlatform.allowDependencies();
6263
createApiEnforcedConfiguration(project);
6364
BomExtension bom = project.getExtensions().create("bom", BomExtension.class, project);
64-
CheckBom checkBom = project.getTasks().create("bomrCheck", CheckBom.class, bom);
65+
TaskProvider<CheckBom> checkBom = project.getTasks().register("bomrCheck", CheckBom.class, bom);
6566
project.getTasks().named("check").configure((check) -> check.dependsOn(checkBom));
66-
project.getTasks().create("bomrUpgrade", UpgradeBom.class, bom);
67-
project.getTasks().create("moveToSnapshots", MoveToSnapshots.class, bom);
67+
project.getTasks().register("bomrUpgrade", UpgradeBom.class, bom);
68+
project.getTasks().register("moveToSnapshots", MoveToSnapshots.class, bom);
6869
project.getTasks().register("checkLinks", CheckLinks.class, bom);
6970
new PublishingCustomizer(project, bom).customize();
7071
}

0 commit comments

Comments
 (0)