Skip to content

Commit ecbc8ea

Browse files
committed
Merge branch '2.3.x'
Closes gh-22202
2 parents ecc50d1 + 79770b9 commit ecbc8ea

File tree

4 files changed

+80
-11
lines changed

4 files changed

+80
-11
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@
2727
import org.gradle.api.file.FileCopyDetails;
2828
import org.gradle.api.file.FileTreeElement;
2929
import org.gradle.api.internal.file.copy.CopyAction;
30+
import org.gradle.api.plugins.JavaPluginConvention;
3031
import org.gradle.api.specs.Spec;
3132
import org.gradle.api.tasks.Internal;
3233
import org.gradle.api.tasks.Nested;
3334
import org.gradle.api.tasks.Optional;
35+
import org.gradle.api.tasks.SourceSet;
3436
import org.gradle.api.tasks.bundling.Jar;
3537

3638
/**
@@ -103,7 +105,12 @@ public void copy() {
103105
@Override
104106
protected CopyAction createCopyAction() {
105107
if (this.layered != null) {
106-
LayerResolver layerResolver = new LayerResolver(getConfigurations(), this.layered, this::isLibrary);
108+
JavaPluginConvention javaPluginConvention = getProject().getConvention()
109+
.findPlugin(JavaPluginConvention.class);
110+
Iterable<SourceSet> sourceSets = (javaPluginConvention != null) ? javaPluginConvention.getSourceSets()
111+
: Collections.emptySet();
112+
LayerResolver layerResolver = new LayerResolver(sourceSets, getConfigurations(), this.layered,
113+
this::isLibrary);
107114
String layerToolsLocation = this.layered.isIncludeLayerTools() ? LIB_DIRECTORY : null;
108115
return this.support.createCopyAction(this, layerResolver, layerToolsLocation);
109116
}

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

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
package org.springframework.boot.gradle.tasks.bundling;
1818

1919
import java.io.File;
20-
import java.util.Arrays;
21-
import java.util.Collections;
2220
import java.util.HashSet;
2321
import java.util.LinkedHashMap;
2422
import java.util.Map;
@@ -30,6 +28,7 @@
3028
import org.gradle.api.artifacts.ResolvedConfiguration;
3129
import org.gradle.api.file.FileCopyDetails;
3230
import org.gradle.api.specs.Spec;
31+
import org.gradle.api.tasks.SourceSet;
3332

3433
import org.springframework.boot.loader.tools.Layer;
3534
import org.springframework.boot.loader.tools.Library;
@@ -53,9 +52,9 @@ class LayerResolver {
5352

5453
private final Spec<FileCopyDetails> librarySpec;
5554

56-
LayerResolver(Iterable<Configuration> configurations, LayeredSpec layeredConfiguration,
57-
Spec<FileCopyDetails> librarySpec) {
58-
this.resolvedDependencies = new ResolvedDependencies(configurations);
55+
LayerResolver(Iterable<SourceSet> sourceSets, Iterable<Configuration> configurations,
56+
LayeredSpec layeredConfiguration, Spec<FileCopyDetails> librarySpec) {
57+
this.resolvedDependencies = new ResolvedDependencies(sourceSets, configurations);
5958
this.layeredConfiguration = layeredConfiguration;
6059
this.librarySpec = librarySpec;
6160
}
@@ -96,19 +95,41 @@ private Library asLibrary(FileCopyDetails details) {
9695
*/
9796
private static class ResolvedDependencies {
9897

99-
private static final Set<String> DEPRECATED_FOR_RESOLUTION_CONFIGURATIONS = Collections
100-
.unmodifiableSet(new HashSet<>(Arrays.asList("archives", "compile", "compileOnly", "default", "runtime",
101-
"testCompile", "testCompileOnly", "testRuntime")));
98+
private final Set<String> deprecatedForResolutionConfigurationNames;
10299

103100
private final Map<Configuration, ResolvedConfigurationDependencies> configurationDependencies = new LinkedHashMap<>();
104101

105-
ResolvedDependencies(Iterable<Configuration> configurations) {
102+
ResolvedDependencies(Iterable<SourceSet> sourceSets, Iterable<Configuration> configurations) {
103+
this.deprecatedForResolutionConfigurationNames = deprecatedForResolutionConfigurationNames(sourceSets);
106104
configurations.forEach(this::processConfiguration);
107105
}
108106

107+
@SuppressWarnings("deprecation")
108+
private Set<String> deprecatedForResolutionConfigurationNames(Iterable<SourceSet> sourceSets) {
109+
Set<String> configurationNames = new HashSet<>();
110+
configurationNames.add("archives");
111+
configurationNames.add("default");
112+
for (SourceSet sourceSet : sourceSets) {
113+
try {
114+
configurationNames.add(sourceSet.getCompileConfigurationName());
115+
}
116+
catch (NoSuchMethodError ex) {
117+
// Continue
118+
}
119+
configurationNames.add(sourceSet.getCompileOnlyConfigurationName());
120+
try {
121+
configurationNames.add(sourceSet.getRuntimeConfigurationName());
122+
}
123+
catch (NoSuchMethodError ex) {
124+
// Continue
125+
}
126+
}
127+
return configurationNames;
128+
}
129+
109130
private void processConfiguration(Configuration configuration) {
110131
if (configuration.isCanBeResolved()
111-
&& !DEPRECATED_FOR_RESOLUTION_CONFIGURATIONS.contains(configuration.getName())) {
132+
&& !this.deprecatedForResolutionConfigurationNames.contains(configuration.getName())) {
112133
this.configurationDependencies.put(configuration,
113134
new ResolvedConfigurationDependencies(configuration.getResolvedConfiguration()));
114135
}

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootJarIntegrationTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ void notUpToDateWhenBuiltWithLayersAndToolsAndThenWithLayersAndWithoutTools()
8686
.getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
8787
}
8888

89+
@TestTemplate
90+
void layersWithCustomSourceSet() throws IOException {
91+
assertThat(this.gradleBuild.build("bootJar").task(":bootJar").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
92+
}
93+
8994
@TestTemplate
9095
void implicitLayers() throws IOException {
9196
writeMainClass();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
plugins {
2+
id 'java'
3+
id 'org.springframework.boot' version '{version}'
4+
}
5+
6+
sourceSets {
7+
custom
8+
}
9+
10+
bootJar {
11+
mainClassName = 'com.example.Application'
12+
layered()
13+
}
14+
15+
repositories {
16+
mavenCentral()
17+
maven { url "file:repository" }
18+
}
19+
20+
dependencies {
21+
implementation("com.example:library:1.0-SNAPSHOT")
22+
implementation("org.apache.commons:commons-lang3:3.9")
23+
implementation("org.springframework:spring-core:5.2.5.RELEASE")
24+
}
25+
26+
task listLayers(type: JavaExec) {
27+
classpath = bootJar.outputs.files
28+
systemProperties = [ "jarmode": "layertools" ]
29+
args "list"
30+
}
31+
32+
task extractLayers(type: JavaExec) {
33+
classpath = bootJar.outputs.files
34+
systemProperties = [ "jarmode": "layertools" ]
35+
args "extract"
36+
}

0 commit comments

Comments
 (0)