Skip to content

Commit 4ee8b07

Browse files
committed
Fix Gradle deprecation warnings
1 parent fcd3413 commit 4ee8b07

File tree

10 files changed

+151
-66
lines changed

10 files changed

+151
-66
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import org.gradle.api.publish.PublishingExtension;
3434
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin;
3535

36+
import org.springframework.util.FileSystemUtils;
37+
3638
/**
3739
* A plugin to make a project's {@code deployment} publication available as a Maven
3840
* repository. The repository can be consumed by depending upon the project using the
@@ -103,7 +105,7 @@ private CleanAction(File location) {
103105

104106
@Override
105107
public void execute(Task task) {
106-
task.getProject().delete(this.location);
108+
FileSystemUtils.deleteRecursively(this.location);
107109
}
108110

109111
}

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

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2021 the original author or authors.
2+
* Copyright 2012-2022 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.
@@ -26,14 +26,23 @@
2626
import java.util.LinkedHashSet;
2727
import java.util.Properties;
2828
import java.util.Set;
29-
import java.util.concurrent.Callable;
3029

3130
import org.gradle.api.DefaultTask;
3231
import org.gradle.api.Task;
32+
import org.gradle.api.file.DirectoryProperty;
33+
import org.gradle.api.file.FileCollection;
34+
import org.gradle.api.file.RegularFile;
35+
import org.gradle.api.file.RegularFileProperty;
36+
import org.gradle.api.provider.Provider;
37+
import org.gradle.api.tasks.InputFile;
38+
import org.gradle.api.tasks.InputFiles;
39+
import org.gradle.api.tasks.Internal;
3340
import org.gradle.api.tasks.OutputFile;
41+
import org.gradle.api.tasks.PathSensitive;
3442
import org.gradle.api.tasks.PathSensitivity;
3543
import org.gradle.api.tasks.SourceSet;
3644
import org.gradle.api.tasks.TaskAction;
45+
import org.gradle.language.jvm.tasks.ProcessResources;
3746

3847
import org.springframework.asm.ClassReader;
3948
import org.springframework.asm.Opcodes;
@@ -48,46 +57,64 @@
4857
*/
4958
public class AutoConfigurationMetadata extends DefaultTask {
5059

51-
private SourceSet sourceSet;
60+
private final DirectoryProperty resourcesDirectory;
5261

53-
private File outputFile;
62+
private final String moduleName;
63+
64+
private final RegularFileProperty outputFile;
65+
66+
private FileCollection classesDirectories;
5467

5568
public AutoConfigurationMetadata() {
56-
getInputs()
57-
.file((Callable<File>) () -> new File(this.sourceSet.getOutput().getResourcesDir(),
58-
"META-INF/spring.factories"))
59-
.withPathSensitivity(PathSensitivity.RELATIVE).withPropertyName("spring.factories");
60-
dependsOn((Callable<String>) () -> this.sourceSet.getProcessResourcesTaskName());
69+
this.resourcesDirectory = getProject().getObjects().directoryProperty();
70+
this.outputFile = getProject().getObjects().fileProperty();
71+
this.moduleName = getProject().getName();
6172
getProject().getConfigurations()
6273
.maybeCreate(AutoConfigurationPlugin.AUTO_CONFIGURATION_METADATA_CONFIGURATION_NAME);
6374
}
6475

76+
@Internal
77+
public DirectoryProperty getResourcesDirectory() {
78+
return this.resourcesDirectory;
79+
}
80+
81+
@InputFile
82+
@PathSensitive(PathSensitivity.RELATIVE)
83+
Provider<RegularFile> getSpringFactories() {
84+
return this.resourcesDirectory.map((resources) -> resources.file("META-INF/spring.factories"));
85+
}
86+
87+
@InputFiles
88+
@PathSensitive(PathSensitivity.RELATIVE)
89+
FileCollection getClassesDirectories() {
90+
return this.classesDirectories;
91+
}
92+
6593
public void setSourceSet(SourceSet sourceSet) {
66-
this.sourceSet = sourceSet;
94+
this.resourcesDirectory.fileProvider(
95+
getProject().getTasks().named(sourceSet.getProcessResourcesTaskName(), ProcessResources.class)
96+
.map(ProcessResources::getDestinationDir));
97+
this.classesDirectories = sourceSet.getOutput().getClassesDirs();
6798
}
6899

69100
@OutputFile
70-
public File getOutputFile() {
101+
public RegularFileProperty getOutputFile() {
71102
return this.outputFile;
72103
}
73104

74-
public void setOutputFile(File outputFile) {
75-
this.outputFile = outputFile;
76-
}
77-
78105
@TaskAction
79106
void documentAutoConfiguration() throws IOException {
80107
Properties autoConfiguration = readAutoConfiguration();
81-
getOutputFile().getParentFile().mkdirs();
82-
try (FileWriter writer = new FileWriter(getOutputFile())) {
108+
File outputFile = this.outputFile.get().getAsFile();
109+
outputFile.getParentFile().mkdirs();
110+
try (FileWriter writer = new FileWriter(outputFile)) {
83111
autoConfiguration.store(writer, null);
84112
}
85113
}
86114

87115
private Properties readAutoConfiguration() throws IOException {
88116
Properties autoConfiguration = CollectionFactory.createSortedProperties(true);
89-
Properties springFactories = readSpringFactories(
90-
new File(this.sourceSet.getOutput().getResourcesDir(), "META-INF/spring.factories"));
117+
Properties springFactories = readSpringFactories(this.getSpringFactories().get().getAsFile());
91118
String enableAutoConfiguration = springFactories
92119
.getProperty("org.springframework.boot.autoconfigure.EnableAutoConfiguration");
93120
Set<String> classNames = StringUtils.commaDelimitedListToSet(enableAutoConfiguration);
@@ -105,13 +132,13 @@ private Properties readAutoConfiguration() throws IOException {
105132
}
106133
}
107134
autoConfiguration.setProperty("autoConfigurationClassNames", String.join(",", publicClassNames));
108-
autoConfiguration.setProperty("module", getProject().getName());
135+
autoConfiguration.setProperty("module", this.moduleName);
109136
return autoConfiguration;
110137
}
111138

112139
private File findClassFile(String className) {
113140
String classFileName = className.replace(".", "/") + ".class";
114-
for (File classesDir : this.sourceSet.getOutput().getClassesDirs()) {
141+
for (File classesDir : this.classesDirectories) {
115142
File classFile = new File(classesDir, classFileName);
116143
if (classFile.isFile()) {
117144
return classFile;

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.io.File;
2020
import java.util.Collections;
21-
import java.util.concurrent.Callable;
2221

2322
import org.gradle.api.Plugin;
2423
import org.gradle.api.Project;
@@ -39,7 +38,8 @@
3938
* <li>Applying the {@link ConfigurationPropertiesPlugin}.
4039
* <li>Adding a dependency on the auto-configuration annotation processor.
4140
* <li>Defining a task that produces metadata describing the auto-configuration. The
42-
* metadata is made available as an artifact in the
41+
* metadata is made available as an artifact in the {@code autoConfigurationMetadata}
42+
* configuration
4343
* </ul>
4444
*
4545
* @author Andy Wilkinson
@@ -66,13 +66,11 @@ public void apply(Project project) {
6666
.add(project.getDependencies().project(Collections.singletonMap("path",
6767
":spring-boot-project:spring-boot-tools:spring-boot-configuration-processor")));
6868
project.getTasks().create("autoConfigurationMetadata", AutoConfigurationMetadata.class, (task) -> {
69-
SourceSet main = project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets()
70-
.getByName(SourceSet.MAIN_SOURCE_SET_NAME);
71-
task.setSourceSet(main);
72-
task.dependsOn(main.getClassesTaskName());
73-
task.setOutputFile(new File(project.getBuildDir(), "auto-configuration-metadata.properties"));
69+
task.setSourceSet(project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets()
70+
.getByName(SourceSet.MAIN_SOURCE_SET_NAME));
71+
task.getOutputFile().set(new File(project.getBuildDir(), "auto-configuration-metadata.properties"));
7472
project.getArtifacts().add(AutoConfigurationPlugin.AUTO_CONFIGURATION_METADATA_CONFIGURATION_NAME,
75-
project.provider((Callable<File>) task::getOutputFile), (artifact) -> artifact.builtBy(task));
73+
task.getOutputFile(), (artifact) -> artifact.builtBy(task));
7674
});
7775
});
7876
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,9 @@ public void apply(Project project) {
6161
createApiEnforcedConfiguration(project);
6262
BomExtension bom = project.getExtensions().create("bom", BomExtension.class, project.getDependencies(),
6363
project);
64-
project.getTasks().create("bomrCheck", CheckBom.class, bom);
65-
project.getTasks().create("bomrUpgrade", UpgradeBom.class, bom);
64+
project.getTasks().register("bomrCheck", CheckBom.class, bom);
65+
project.getTasks().register("bomrUpgrade", UpgradeBom.class, bom);
6666
new PublishingCustomizer(project, bom).customize();
67-
6867
}
6968

7069
private void createApiEnforcedConfiguration(Project project) {

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

Lines changed: 68 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package org.springframework.boot.build.bom;
1818

19+
import java.util.ArrayList;
20+
import java.util.LinkedHashSet;
21+
import java.util.List;
1922
import java.util.Set;
2023
import java.util.TreeSet;
2124
import java.util.stream.Collectors;
@@ -24,11 +27,16 @@
2427

2528
import org.gradle.api.DefaultTask;
2629
import org.gradle.api.InvalidUserDataException;
30+
import org.gradle.api.artifacts.Configuration;
31+
import org.gradle.api.artifacts.result.DependencyResult;
32+
import org.gradle.api.artifacts.result.ResolvedComponentResult;
33+
import org.gradle.api.artifacts.result.ResolvedDependencyResult;
34+
import org.gradle.api.provider.ListProperty;
2735
import org.gradle.api.tasks.TaskAction;
2836

37+
import org.springframework.boot.build.bom.Library.Exclusion;
2938
import org.springframework.boot.build.bom.Library.Group;
3039
import org.springframework.boot.build.bom.Library.Module;
31-
import org.springframework.boot.build.bom.bomr.version.DependencyVersion;
3240

3341
/**
3442
* Checks the validity of a bom.
@@ -37,34 +45,60 @@
3745
*/
3846
public class CheckBom extends DefaultTask {
3947

40-
private final BomExtension bom;
48+
private final ListProperty<ResolvedModule> resolvedModules;
4149

4250
@Inject
4351
public CheckBom(BomExtension bom) {
44-
this.bom = bom;
52+
this.resolvedModules = getProject().getObjects().listProperty(ResolvedModule.class);
53+
this.resolvedModules.set(getProject().provider(() -> {
54+
List<ResolvedModule> results = new ArrayList<>();
55+
for (Library library : bom.getLibraries()) {
56+
for (Group group : library.getGroups()) {
57+
for (Module module : group.getModules()) {
58+
if (!module.getExclusions().isEmpty()) {
59+
Configuration detachedConfiguration = getProject().getConfigurations()
60+
.detachedConfiguration(getProject().getDependencies().create(group.getId() + ":"
61+
+ module.getName() + ":" + library.getVersion().getVersion()));
62+
results.add(new ResolvedModule(group.getId() + ":" + module.getName(),
63+
detachedConfiguration.getIncoming().getResolutionResult().getRoot(),
64+
module.getExclusions()));
65+
}
66+
}
67+
}
68+
}
69+
return results;
70+
}));
71+
4572
}
4673

4774
@TaskAction
4875
void checkBom() {
49-
for (Library library : this.bom.getLibraries()) {
50-
for (Group group : library.getGroups()) {
51-
for (Module module : group.getModules()) {
52-
if (!module.getExclusions().isEmpty()) {
53-
checkExclusions(group.getId(), module, library.getVersion().getVersion());
54-
}
76+
for (ResolvedModule module : this.resolvedModules.get()) {
77+
checkExclusions(module);
78+
}
79+
}
80+
81+
private Set<String> dependencyIds(ResolvedComponentResult componentResult) {
82+
Set<String> dependencyIds = new LinkedHashSet<>();
83+
dependencyIds(componentResult, dependencyIds);
84+
return dependencyIds;
85+
}
86+
87+
private void dependencyIds(ResolvedComponentResult componentResult, Set<String> dependencyIds) {
88+
String componentId = componentResult.getModuleVersion().getGroup() + ":"
89+
+ componentResult.getModuleVersion().getName() + ":" + componentResult.getModuleVersion().getVersion();
90+
if (dependencyIds.add(componentId)) {
91+
for (DependencyResult result : componentResult.getDependencies()) {
92+
if (result instanceof ResolvedDependencyResult) {
93+
dependencyIds(((ResolvedDependencyResult) result).getSelected(), dependencyIds);
5594
}
5695
}
5796
}
5897
}
5998

60-
private void checkExclusions(String groupId, Module module, DependencyVersion version) {
61-
Set<String> resolved = getProject().getConfigurations()
62-
.detachedConfiguration(
63-
getProject().getDependencies().create(groupId + ":" + module.getName() + ":" + version))
64-
.getResolvedConfiguration().getResolvedArtifacts().stream()
65-
.map((artifact) -> artifact.getModuleVersion().getId())
66-
.map((id) -> id.getGroup() + ":" + id.getModule().getName()).collect(Collectors.toSet());
67-
Set<String> exclusions = module.getExclusions().stream()
99+
private void checkExclusions(ResolvedModule module) {
100+
Set<String> resolved = dependencyIds(module.resolvedComponentResult);
101+
Set<String> exclusions = module.exclusions.stream()
68102
.map((exclusion) -> exclusion.getGroupId() + ":" + exclusion.getArtifactId())
69103
.collect(Collectors.toSet());
70104
Set<String> unused = new TreeSet<>();
@@ -83,9 +117,24 @@ private void checkExclusions(String groupId, Module module, DependencyVersion ve
83117
}
84118
exclusions.removeAll(resolved);
85119
if (!unused.isEmpty()) {
86-
throw new InvalidUserDataException(
87-
"Unnecessary exclusions on " + groupId + ":" + module.getName() + ": " + exclusions);
120+
throw new InvalidUserDataException("Unnecessary exclusions on " + module.id + ": " + exclusions);
88121
}
89122
}
90123

124+
private static final class ResolvedModule {
125+
126+
private final String id;
127+
128+
private final ResolvedComponentResult resolvedComponentResult;
129+
130+
private final List<Exclusion> exclusions;
131+
132+
private ResolvedModule(String id, ResolvedComponentResult resolvedComponentResult, List<Exclusion> exclusions) {
133+
this.id = id;
134+
this.resolvedComponentResult = resolvedComponentResult;
135+
this.exclusions = exclusions;
136+
}
137+
138+
}
139+
91140
}

buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/UpgradeBom.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,14 @@
5959
*/
6060
public class UpgradeBom extends DefaultTask {
6161

62-
private Set<String> repositoryUrls;
63-
6462
private final BomExtension bom;
6563

64+
private final Path buildFile;
65+
66+
private final Path gradleProperties;
67+
68+
private final Set<String> repositoryUrls;
69+
6670
private String milestone;
6771

6872
private String libraries;
@@ -77,6 +81,8 @@ public UpgradeBom(BomExtension bom) {
7781
this.repositoryUrls.add(repositoryUrl);
7882
}
7983
});
84+
this.buildFile = getProject().getBuildFile().toPath();
85+
this.gradleProperties = new File(getProject().getRootProject().getProjectDir(), "gradle.properties").toPath();
8086
}
8187

8288
@Option(option = "milestone", description = "Milestone to which dependency upgrade issues should be assigned")
@@ -118,9 +124,8 @@ void upgradeDependencies() {
118124
List<Upgrade> upgrades = new InteractiveUpgradeResolver(new MavenMetadataVersionResolver(this.repositoryUrls),
119125
this.bom.getUpgrade().getPolicy(), getServices().get(UserInputHandler.class))
120126
.resolveUpgrades(matchingLibraries(this.libraries), this.bom.getLibraries());
121-
Path buildFile = getProject().getBuildFile().toPath();
122-
Path gradleProperties = new File(getProject().getRootProject().getProjectDir(), "gradle.properties").toPath();
123-
UpgradeApplicator upgradeApplicator = new UpgradeApplicator(buildFile, gradleProperties);
127+
128+
UpgradeApplicator upgradeApplicator = new UpgradeApplicator(this.buildFile, this.gradleProperties);
124129
for (Upgrade upgrade : upgrades) {
125130
String title = "Upgrade to " + upgrade.getLibrary().getName() + " " + upgrade.getVersion();
126131
Issue existingUpgradeIssue = findExistingUpgradeIssue(existingUpgradeIssues, upgrade);

buildSrc/src/main/java/org/springframework/boot/build/cli/ScoopManifest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@
2828
*/
2929
public class ScoopManifest extends AbstractPackageManagerDefinitionTask {
3030

31+
private final String version = getProject().getVersion().toString();
32+
3133
@TaskAction
3234
void createManifest() {
33-
String version = getProject().getVersion().toString();
34-
createDescriptor(Collections.singletonMap("scoopVersion", version.substring(0, version.lastIndexOf('.'))));
35+
createDescriptor(
36+
Collections.singletonMap("scoopVersion", this.version.substring(0, this.version.lastIndexOf('.'))));
3537
}
3638

3739
}

0 commit comments

Comments
 (0)