Skip to content

Commit fd864c3

Browse files
committed
Improve mapping of resolved artifacts to dependency coordinates
Closes gh-31216
1 parent 414c260 commit fd864c3

File tree

9 files changed

+144
-173
lines changed

9 files changed

+144
-173
lines changed

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ private TaskProvider<BootJar> configureBootJarTask(Project project,
144144
.getByName(SpringBootPlugin.DEVELOPMENT_ONLY_CONFIGURATION_NAME);
145145
Configuration productionRuntimeClasspath = project.getConfigurations()
146146
.getByName(SpringBootPlugin.PRODUCTION_RUNTIME_CLASSPATH_CONFIGURATION_NAME);
147+
Configuration runtimeClasspath = project.getConfigurations()
148+
.getByName(mainSourceSet.getRuntimeClasspathConfigurationName());
147149
Callable<FileCollection> classpath = () -> mainSourceSet.getRuntimeClasspath()
148150
.minus((developmentOnly.minus(productionRuntimeClasspath)))
149151
.filter(new JarTypeFileSpec());
@@ -159,6 +161,7 @@ private TaskProvider<BootJar> configureBootJarTask(Project project,
159161
? manifestStartClass : resolveMainClassName.get().readMainClassName()));
160162
bootJar.getTargetJavaVersion()
161163
.set(project.provider(() -> javaPluginExtension(project).getTargetCompatibility()));
164+
bootJar.resolvedArtifacts(runtimeClasspath.getIncoming().getArtifacts().getResolvedArtifacts());
162165
});
163166
}
164167

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/WarPluginAction.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,12 @@ private TaskProvider<BootWar> configureBootWarTask(Project project) {
7474
.getByName(SpringBootPlugin.DEVELOPMENT_ONLY_CONFIGURATION_NAME);
7575
Configuration productionRuntimeClasspath = project.getConfigurations()
7676
.getByName(SpringBootPlugin.PRODUCTION_RUNTIME_CLASSPATH_CONFIGURATION_NAME);
77-
Callable<FileCollection> classpath = () -> project.getExtensions()
77+
SourceSet mainSourceSet = project.getExtensions()
7878
.getByType(SourceSetContainer.class)
79-
.getByName(SourceSet.MAIN_SOURCE_SET_NAME)
80-
.getRuntimeClasspath()
79+
.getByName(SourceSet.MAIN_SOURCE_SET_NAME);
80+
Configuration runtimeClasspath = project.getConfigurations()
81+
.getByName(mainSourceSet.getRuntimeClasspathConfigurationName());
82+
Callable<FileCollection> classpath = () -> mainSourceSet.getRuntimeClasspath()
8183
.minus(providedRuntimeConfiguration(project))
8284
.minus((developmentOnly.minus(productionRuntimeClasspath)))
8385
.filter(new JarTypeFileSpec());
@@ -97,6 +99,7 @@ private TaskProvider<BootWar> configureBootWarTask(Project project) {
9799
? manifestStartClass : resolveMainClassName.get().readMainClassName()));
98100
bootWar.getTargetJavaVersion()
99101
.set(project.provider(() -> javaPluginExtension(project).getTargetCompatibility()));
102+
bootWar.resolvedArtifacts(runtimeClasspath.getIncoming().getArtifacts().getResolvedArtifacts());
100103
});
101104
bootWarProvider.map(War::getClasspath);
102105
return bootWarProvider;

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchive.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@
1616

1717
package org.springframework.boot.gradle.tasks.bundling;
1818

19+
import java.util.Set;
20+
1921
import org.gradle.api.Action;
2022
import org.gradle.api.JavaVersion;
2123
import org.gradle.api.Project;
2224
import org.gradle.api.Task;
25+
import org.gradle.api.artifacts.result.ResolvedArtifactResult;
2326
import org.gradle.api.file.FileCollection;
2427
import org.gradle.api.file.FileTreeElement;
2528
import org.gradle.api.provider.Property;
29+
import org.gradle.api.provider.Provider;
2630
import org.gradle.api.specs.Spec;
2731
import org.gradle.api.tasks.Classpath;
2832
import org.gradle.api.tasks.Input;
@@ -120,4 +124,13 @@ public interface BootArchive extends Task {
120124
@Optional
121125
Property<JavaVersion> getTargetJavaVersion();
122126

127+
/**
128+
* Registers the given lazily provided {@code resolvedArtifacts}. They are used to map
129+
* from the files in the {@link #getClasspath classpath} to their dependency
130+
* coordinates.
131+
* @param resolvedArtifacts the lazily provided resolved artifacts
132+
* @since 3.0.7
133+
*/
134+
void resolvedArtifacts(Provider<Set<ResolvedArtifactResult>> resolvedArtifacts);
135+
123136
}

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootJar.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818

1919
import java.io.File;
2020
import java.util.Collections;
21+
import java.util.Set;
2122
import java.util.concurrent.Callable;
2223
import java.util.function.Function;
2324

2425
import org.gradle.api.Action;
2526
import org.gradle.api.Project;
26-
import org.gradle.api.artifacts.ResolvableDependencies;
27+
import org.gradle.api.artifacts.result.ResolvedArtifactResult;
2728
import org.gradle.api.file.CopySpec;
2829
import org.gradle.api.file.FileCollection;
2930
import org.gradle.api.file.FileCopyDetails;
@@ -58,8 +59,6 @@ public abstract class BootJar extends Jar implements BootArchive {
5859

5960
private static final String CLASSPATH_INDEX = "BOOT-INF/classpath.idx";
6061

61-
private final ResolvedDependencies resolvedDependencies = new ResolvedDependencies();
62-
6362
private final BootArchiveSupport support;
6463

6564
private final CopySpec bootInfSpec;
@@ -70,6 +69,8 @@ public abstract class BootJar extends Jar implements BootArchive {
7069

7170
private final Provider<Object> projectVersion;
7271

72+
private final ResolvedDependencies resolvedDependencies;
73+
7374
private FileCollection classpath;
7475

7576
/**
@@ -82,16 +83,9 @@ public BootJar() {
8283
this.layered = project.getObjects().newInstance(LayeredSpec.class);
8384
configureBootInfSpec(this.bootInfSpec);
8485
getMainSpec().with(this.bootInfSpec);
85-
project.getConfigurations().all((configuration) -> {
86-
ResolvableDependencies incoming = configuration.getIncoming();
87-
incoming.afterResolve((resolvableDependencies) -> {
88-
if (resolvableDependencies == incoming) {
89-
this.resolvedDependencies.processConfiguration(project, configuration);
90-
}
91-
});
92-
});
9386
this.projectName = project.provider(project::getName);
9487
this.projectVersion = project.provider(project::getVersion);
88+
this.resolvedDependencies = new ResolvedDependencies(project);
9589
}
9690

9791
private void configureBootInfSpec(CopySpec bootInfSpec) {
@@ -123,6 +117,16 @@ private void moveMetaInfToRoot(CopySpec spec) {
123117
});
124118
}
125119

120+
@Override
121+
public void resolvedArtifacts(Provider<Set<ResolvedArtifactResult>> resolvedArtifacts) {
122+
this.resolvedDependencies.resolvedArtifacts(resolvedArtifacts);
123+
}
124+
125+
@Nested
126+
ResolvedDependencies getResolvedDependencies() {
127+
return this.resolvedDependencies;
128+
}
129+
126130
@Override
127131
public void copy() {
128132
this.support.configureManifest(getManifest(), getMainClass().get(), CLASSES_DIRECTORY, LIB_DIRECTORY,
@@ -291,11 +295,6 @@ private static <T> Callable<T> callTo(Callable<T> callable) {
291295
return callable;
292296
}
293297

294-
@Internal
295-
ResolvedDependencies getResolvedDependencies() {
296-
return this.resolvedDependencies;
297-
}
298-
299298
private final class LibrarySpec implements Spec<FileCopyDetails> {
300299

301300
@Override

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootWar.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@
1717
package org.springframework.boot.gradle.tasks.bundling;
1818

1919
import java.util.Collections;
20+
import java.util.Set;
2021
import java.util.concurrent.Callable;
2122
import java.util.function.Function;
2223

2324
import org.gradle.api.Action;
2425
import org.gradle.api.Project;
25-
import org.gradle.api.artifacts.ResolvableDependencies;
26+
import org.gradle.api.artifacts.result.ResolvedArtifactResult;
2627
import org.gradle.api.file.CopySpec;
2728
import org.gradle.api.file.FileCollection;
2829
import org.gradle.api.file.FileCopyDetails;
@@ -31,7 +32,6 @@
3132
import org.gradle.api.provider.Provider;
3233
import org.gradle.api.specs.Spec;
3334
import org.gradle.api.tasks.Classpath;
34-
import org.gradle.api.tasks.Internal;
3535
import org.gradle.api.tasks.Nested;
3636
import org.gradle.api.tasks.Optional;
3737
import org.gradle.api.tasks.bundling.War;
@@ -62,14 +62,14 @@ public abstract class BootWar extends War implements BootArchive {
6262

6363
private final BootArchiveSupport support;
6464

65-
private final ResolvedDependencies resolvedDependencies = new ResolvedDependencies();
66-
6765
private final LayeredSpec layered;
6866

6967
private final Provider<String> projectName;
7068

7169
private final Provider<Object> projectVersion;
7270

71+
private final ResolvedDependencies resolvedDependencies;
72+
7373
private FileCollection providedClasspath;
7474

7575
/**
@@ -82,22 +82,25 @@ public BootWar() {
8282
getWebInf().into("lib-provided", fromCallTo(this::getProvidedLibFiles));
8383
this.support.moveModuleInfoToRoot(getRootSpec());
8484
getRootSpec().eachFile(this.support::excludeNonZipLibraryFiles);
85-
project.getConfigurations().all((configuration) -> {
86-
ResolvableDependencies incoming = configuration.getIncoming();
87-
incoming.afterResolve((resolvableDependencies) -> {
88-
if (resolvableDependencies == incoming) {
89-
this.resolvedDependencies.processConfiguration(project, configuration);
90-
}
91-
});
92-
});
9385
this.projectName = project.provider(project::getName);
9486
this.projectVersion = project.provider(project::getVersion);
87+
this.resolvedDependencies = new ResolvedDependencies(project);
9588
}
9689

9790
private Object getProvidedLibFiles() {
9891
return (this.providedClasspath != null) ? this.providedClasspath : Collections.emptyList();
9992
}
10093

94+
@Override
95+
public void resolvedArtifacts(Provider<Set<ResolvedArtifactResult>> resolvedArtifacts) {
96+
this.resolvedDependencies.resolvedArtifacts(resolvedArtifacts);
97+
}
98+
99+
@Nested
100+
ResolvedDependencies getResolvedDependencies() {
101+
return this.resolvedDependencies;
102+
}
103+
101104
@Override
102105
public void copy() {
103106
this.support.configureManifest(getManifest(), getMainClass().get(), CLASSES_DIRECTORY, LIB_DIRECTORY,
@@ -240,11 +243,6 @@ private LaunchScriptConfiguration enableLaunchScriptIfNecessary() {
240243
return launchScript;
241244
}
242245

243-
@Internal
244-
ResolvedDependencies getResolvedDependencies() {
245-
return this.resolvedDependencies;
246-
}
247-
248246
/**
249247
* Syntactic sugar that makes {@link CopySpec#into} calls a little easier to read.
250248
* @param <T> the result type

0 commit comments

Comments
 (0)