Skip to content

Commit 08a4a83

Browse files
committed
Merge branch '3.1.x'
Closes gh-38233
2 parents dbe882a + b01235e commit 08a4a83

File tree

4 files changed

+41
-31
lines changed

4 files changed

+41
-31
lines changed

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,17 @@
2626
import org.gradle.api.Project;
2727
import org.gradle.api.Task;
2828
import org.gradle.api.artifacts.Configuration;
29+
import org.gradle.api.attributes.Attribute;
2930
import org.gradle.api.attributes.AttributeContainer;
30-
import org.gradle.api.attributes.Bundling;
31-
import org.gradle.api.attributes.LibraryElements;
32-
import org.gradle.api.attributes.Usage;
3331
import org.gradle.api.file.FileCollection;
34-
import org.gradle.api.model.ObjectFactory;
3532
import org.gradle.api.plugins.ApplicationPlugin;
3633
import org.gradle.api.plugins.BasePlugin;
3734
import org.gradle.api.plugins.ExtensionContainer;
3835
import org.gradle.api.plugins.JavaApplication;
3936
import org.gradle.api.plugins.JavaPlugin;
4037
import org.gradle.api.plugins.JavaPluginExtension;
4138
import org.gradle.api.provider.Provider;
39+
import org.gradle.api.provider.ProviderFactory;
4240
import org.gradle.api.tasks.SourceSet;
4341
import org.gradle.api.tasks.SourceSetContainer;
4442
import org.gradle.api.tasks.TaskProvider;
@@ -275,18 +273,21 @@ private void configureAdditionalMetadataLocations(JavaCompile compile) {
275273
.ifPresent((locations) -> compile.doFirst(new AdditionalMetadataLocationsConfigurer(locations)));
276274
}
277275

276+
@SuppressWarnings({ "rawtypes", "unchecked" })
278277
private void configureProductionRuntimeClasspathConfiguration(Project project) {
279278
Configuration productionRuntimeClasspath = project.getConfigurations()
280279
.create(SpringBootPlugin.PRODUCTION_RUNTIME_CLASSPATH_CONFIGURATION_NAME);
281-
AttributeContainer attributes = productionRuntimeClasspath.getAttributes();
282-
ObjectFactory objectFactory = project.getObjects();
283-
attributes.attribute(Usage.USAGE_ATTRIBUTE, objectFactory.named(Usage.class, Usage.JAVA_RUNTIME));
284-
attributes.attribute(Bundling.BUNDLING_ATTRIBUTE, objectFactory.named(Bundling.class, Bundling.EXTERNAL));
285-
attributes.attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE,
286-
objectFactory.named(LibraryElements.class, LibraryElements.JAR));
287280
productionRuntimeClasspath.setVisible(false);
288281
Configuration runtimeClasspath = project.getConfigurations()
289282
.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);
283+
productionRuntimeClasspath.attributes((attributes) -> {
284+
ProviderFactory providers = project.getProviders();
285+
AttributeContainer sourceAttributes = runtimeClasspath.getAttributes();
286+
for (Attribute attribute : sourceAttributes.keySet()) {
287+
attributes.attributeProvider(attribute,
288+
providers.provider(() -> sourceAttributes.getAttribute(attribute)));
289+
}
290+
});
290291
productionRuntimeClasspath.setExtendsFrom(runtimeClasspath.getExtendsFrom());
291292
productionRuntimeClasspath.setCanBeResolved(runtimeClasspath.isCanBeResolved());
292293
productionRuntimeClasspath.setCanBeConsumed(runtimeClasspath.isCanBeConsumed());

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import java.util.HashSet;
2525
import java.util.Set;
2626
import java.util.jar.JarOutputStream;
27+
import java.util.regex.Matcher;
28+
import java.util.regex.Pattern;
2729

2830
import org.gradle.testkit.runner.BuildResult;
2931
import org.gradle.testkit.runner.TaskOutcome;
@@ -191,11 +193,12 @@ void runtimeClasspathIncludesDevelopmentOnlyDependencies() {
191193
}
192194

193195
@TestTemplate
194-
void productionRuntimeClasspathIsConfiguredWithAttributes() {
195-
assertThat(this.gradleBuild.build("build").getOutput()).contains("3 productionRuntimeClasspath attributes:")
196-
.contains("org.gradle.usage: java-runtime")
197-
.contains("org.gradle.libraryelements: jar")
198-
.contains("org.gradle.dependency.bundling: external");
196+
void productionRuntimeClasspathIsConfiguredWithAttributesThatMatchRuntimeClasspath() {
197+
String output = this.gradleBuild.build("build").getOutput();
198+
Matcher matcher = Pattern.compile("runtimeClasspath: (\\[.*\\])").matcher(output);
199+
assertThat(matcher.find()).as("%s found in %s", matcher, output).isTrue();
200+
String attributes = matcher.group(1);
201+
assertThat(output).contains("productionRuntimeClasspath: " + attributes);
199202
}
200203

201204
@TestTemplate

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-productionRuntimeClasspathIsConfiguredWithAttributes.gradle

Lines changed: 0 additions & 16 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
def collectAttributes(String configurationName) {
2+
def attributes = configurations.findByName(configurationName).attributes
3+
def keys = new TreeSet<>((a1, a2) -> a1.name.compareTo(a2.name))
4+
keys.addAll(attributes.keySet())
5+
keys.collect { key -> "${key}: ${attributes.getAttribute(key)}" }
6+
}
7+
8+
plugins {
9+
id 'org.springframework.boot' version '{version}'
10+
id 'java'
11+
}
12+
13+
springBoot {
14+
mainClass = "com.example.Main"
15+
}
16+
17+
gradle.taskGraph.whenReady {
18+
def runtimeClasspathAttributes = collectAttributes("runtimeClasspath")
19+
def productionRuntimeClasspathAttributes = collectAttributes("productionRuntimeClasspath")
20+
println("runtimeClasspath: ${runtimeClasspathAttributes}")
21+
println("productionRuntimeClasspath: ${productionRuntimeClasspathAttributes}")
22+
}

0 commit comments

Comments
 (0)