Skip to content

Commit 03dd666

Browse files
committed
Merge branch '2.7.x' into 3.0.x
Closes gh-34460
2 parents f5a8a71 + 4f7e038 commit 03dd666

File tree

25 files changed

+170
-119
lines changed

25 files changed

+170
-119
lines changed

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/com/example/bootrun/classpath/BootRunClasspathApplication.java

Lines changed: 2 additions & 1 deletion
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-2023 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.
@@ -31,6 +31,7 @@ protected BootRunClasspathApplication() {
3131
}
3232

3333
public static void main(String[] args) {
34+
System.out.println("Main class name = " + BootRunClasspathApplication.class.getName());
3435
int i = 1;
3536
for (String entry : ManagementFactory.getRuntimeMXBean().getClassPath().split(File.pathSeparator)) {
3637
System.out.println(i++ + ". " + entry);

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

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -47,53 +47,46 @@ class JavaPluginActionIntegrationTests {
4747

4848
@TestTemplate
4949
void noBootJarTaskWithoutJavaPluginApplied() {
50-
assertThat(this.gradleBuild.build("taskExists", "-PtaskName=bootJar").getOutput())
51-
.contains("bootJar exists = false");
50+
assertThat(this.gradleBuild.build("tasks").getOutput()).doesNotContain("bootJar");
5251
}
5352

5453
@TestTemplate
5554
void applyingJavaPluginCreatesBootJarTask() {
56-
assertThat(this.gradleBuild.build("taskExists", "-PtaskName=bootJar", "-PapplyJavaPlugin").getOutput())
57-
.contains("bootJar exists = true");
55+
assertThat(this.gradleBuild.build("tasks").getOutput()).contains("bootJar");
5856
}
5957

6058
@TestTemplate
6159
void noBootRunTaskWithoutJavaPluginApplied() {
62-
assertThat(this.gradleBuild.build("taskExists", "-PtaskName=bootRun").getOutput())
63-
.contains("bootRun exists = false");
60+
assertThat(this.gradleBuild.build("tasks").getOutput()).doesNotContain("bootRun");
6461
}
6562

6663
@TestTemplate
6764
void applyingJavaPluginCreatesBootRunTask() {
68-
assertThat(this.gradleBuild.build("taskExists", "-PtaskName=bootRun", "-PapplyJavaPlugin").getOutput())
69-
.contains("bootRun exists = true");
65+
assertThat(this.gradleBuild.build("tasks").getOutput()).contains("bootRun");
7066
}
7167

7268
@TestTemplate
7369
void javaCompileTasksUseUtf8Encoding() {
74-
assertThat(this.gradleBuild.build("javaCompileEncoding", "-PapplyJavaPlugin").getOutput())
75-
.contains("compileJava = UTF-8")
70+
assertThat(this.gradleBuild.build("build").getOutput()).contains("compileJava = UTF-8")
7671
.contains("compileTestJava = UTF-8");
7772
}
7873

7974
@TestTemplate
8075
void javaCompileTasksUseParametersCompilerFlagByDefault() {
81-
assertThat(this.gradleBuild.build("javaCompileTasksCompilerArgs").getOutput())
82-
.contains("compileJava compiler args: [-parameters]")
76+
assertThat(this.gradleBuild.build("build").getOutput()).contains("compileJava compiler args: [-parameters]")
8377
.contains("compileTestJava compiler args: [-parameters]");
8478
}
8579

8680
@TestTemplate
8781
void javaCompileTasksUseParametersAndAdditionalCompilerFlags() {
88-
assertThat(this.gradleBuild.build("javaCompileTasksCompilerArgs").getOutput())
82+
assertThat(this.gradleBuild.build("build").getOutput())
8983
.contains("compileJava compiler args: [-parameters, -Xlint:all]")
9084
.contains("compileTestJava compiler args: [-parameters, -Xlint:all]");
9185
}
9286

9387
@TestTemplate
9488
void javaCompileTasksCanOverrideDefaultParametersCompilerFlag() {
95-
assertThat(this.gradleBuild.build("javaCompileTasksCompilerArgs").getOutput())
96-
.contains("compileJava compiler args: [-Xlint:all]")
89+
assertThat(this.gradleBuild.build("build").getOutput()).contains("compileJava compiler args: [-Xlint:all]")
9790
.contains("compileTestJava compiler args: [-Xlint:all]");
9891
}
9992

@@ -139,35 +132,24 @@ void additionalMetadataLocationsNotConfiguredWhenProcessorIsAbsent() throws IOEx
139132

140133
@TestTemplate
141134
void applyingJavaPluginCreatesDevelopmentOnlyConfiguration() {
142-
assertThat(this.gradleBuild
143-
.build("configurationExists", "-PconfigurationName=developmentOnly", "-PapplyJavaPlugin")
144-
.getOutput()).contains("developmentOnly exists = true");
135+
assertThat(this.gradleBuild.build("build").getOutput()).contains("developmentOnly exists = true");
145136
}
146137

147138
@TestTemplate
148139
void productionRuntimeClasspathIsConfiguredWithAttributes() {
149-
assertThat(this.gradleBuild
150-
.build("configurationAttributes", "-PconfigurationName=productionRuntimeClasspath", "-PapplyJavaPlugin")
151-
.getOutput()).contains("3 productionRuntimeClasspath attributes:")
140+
assertThat(this.gradleBuild.build("build").getOutput()).contains("3 productionRuntimeClasspath attributes:")
152141
.contains("org.gradle.usage: java-runtime")
153142
.contains("org.gradle.libraryelements: jar")
154143
.contains("org.gradle.dependency.bundling: external");
155144
}
156145

157146
@TestTemplate
158147
void productionRuntimeClasspathIsConfiguredWithResolvabilityAndConsumabilityThatMatchesRuntimeClasspath() {
159-
String runtime = this.gradleBuild
160-
.build("configurationResolvabilityAndConsumability", "-PconfigurationName=runtimeClasspath",
161-
"-PapplyJavaPlugin")
162-
.getOutput();
163-
assertThat(runtime).contains("canBeResolved: true");
164-
assertThat(runtime).contains("canBeConsumed: false");
165-
String productionRuntime = this.gradleBuild
166-
.build("configurationResolvabilityAndConsumability", "-PconfigurationName=productionRuntimeClasspath",
167-
"-PapplyJavaPlugin")
168-
.getOutput();
169-
assertThat(productionRuntime).contains("canBeResolved: true");
170-
assertThat(productionRuntime).contains("canBeConsumed: false");
148+
String output = this.gradleBuild.build("build").getOutput();
149+
assertThat(output).contains("runtimeClasspath canBeResolved: true");
150+
assertThat(output).contains("runtimeClasspath canBeConsumed: false");
151+
assertThat(output).contains("productionRuntimeClasspath canBeResolved: true");
152+
assertThat(output).contains("productionRuntimeClasspath canBeConsumed: false");
171153
}
172154

173155
@TestTemplate

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.util.TreeSet;
2323

2424
import org.gradle.testkit.runner.BuildResult;
25-
import org.gradle.testkit.runner.TaskOutcome;
2625
import org.junit.jupiter.api.TestTemplate;
2726

2827
import org.springframework.boot.gradle.junit.GradleCompatibility;
@@ -45,9 +44,7 @@ class BootJarIntegrationTests extends AbstractBootArchiveIntegrationTests {
4544

4645
@TestTemplate
4746
void whenAResolvableCopyOfAnUnresolvableConfigurationIsResolvedThenResolutionSucceeds() {
48-
BuildResult build = this.gradleBuild.build("resolveResolvableCopyOfUnresolvableConfiguration");
49-
assertThat(build.task(":resolveResolvableCopyOfUnresolvableConfiguration").getOutcome())
50-
.isEqualTo(TaskOutcome.SUCCESS);
47+
this.gradleBuild.expectDeprecationWarningsWithAtLeastVersion("8.0").build("build");
5148
}
5249

5350
@TestTemplate

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

Lines changed: 26 additions & 1 deletion
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-2023 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.
@@ -16,10 +16,14 @@
1616

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

19+
import java.io.IOException;
1920
import java.util.Arrays;
2021
import java.util.Set;
2122
import java.util.TreeSet;
2223

24+
import org.assertj.core.api.Assumptions;
25+
import org.gradle.util.GradleVersion;
26+
2327
import org.springframework.boot.gradle.junit.GradleCompatibility;
2428

2529
/**
@@ -42,4 +46,25 @@ String[] getExpectedApplicationLayerContents(String... additionalFiles) {
4246
return contents.toArray(new String[0]);
4347
}
4448

49+
@Override
50+
void multiModuleImplicitLayers() throws IOException {
51+
whenTestingWithTheConfigurationCacheAssumeThatTheGradleVersionIsLessThan8();
52+
super.multiModuleImplicitLayers();
53+
}
54+
55+
@Override
56+
void multiModuleCustomLayers() throws IOException {
57+
whenTestingWithTheConfigurationCacheAssumeThatTheGradleVersionIsLessThan8();
58+
super.multiModuleCustomLayers();
59+
}
60+
61+
private void whenTestingWithTheConfigurationCacheAssumeThatTheGradleVersionIsLessThan8() {
62+
if (this.gradleBuild.isConfigurationCache()) {
63+
// With Gradle 8.0, a configuration cache bug prevents ResolvedDependencies
64+
// from processing dependencies on the runtime classpath
65+
Assumptions.assumeThat(GradleVersion.version(this.gradleBuild.getGradleVersion()))
66+
.isLessThan(GradleVersion.version("8.0"));
67+
}
68+
}
69+
4570
}

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
import java.util.jar.JarOutputStream;
2525
import java.util.jar.Manifest;
2626

27+
import org.assertj.core.api.Assumptions;
2728
import org.gradle.testkit.runner.BuildResult;
2829
import org.gradle.testkit.runner.TaskOutcome;
30+
import org.gradle.util.GradleVersion;
2931
import org.junit.jupiter.api.TestTemplate;
3032

3133
import org.springframework.boot.gradle.junit.GradleCompatibility;
@@ -108,6 +110,13 @@ void optimizedLaunchDisabledJvmArgs() throws IOException {
108110

109111
@TestTemplate
110112
void applicationPluginJvmArgumentsAreUsed() throws IOException {
113+
if (this.gradleBuild.isConfigurationCache()) {
114+
// https://github.com/gradle/gradle/pull/23924
115+
GradleVersion gradleVersion = GradleVersion.version(this.gradleBuild.getGradleVersion());
116+
Assumptions.assumeThat(gradleVersion)
117+
.isLessThan(GradleVersion.version("8.0"))
118+
.isGreaterThanOrEqualTo(GradleVersion.version("8.1-rc-1"));
119+
}
111120
copyJvmArgsApplication();
112121
BuildResult result = this.gradleBuild.build("bootRun");
113122
assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
plugins {
2+
id 'org.springframework.boot' version '{version}'
3+
id 'java'
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
plugins {
2+
id 'org.springframework.boot' version '{version}'
3+
id 'java'
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
plugins {
2+
id 'org.springframework.boot' version '{version}'
3+
id 'java'
4+
}
5+
6+
springBoot {
7+
mainClass = "com.example.Main"
8+
}
9+
10+
gradle.taskGraph.whenReady {
11+
println "developmentOnly exists = ${configurations.findByName('developmentOnly') != null}"
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
plugins {
2+
id 'org.springframework.boot' version '{version}'
3+
id 'java'
4+
}

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@ plugins {
33
id 'org.springframework.boot' version '{version}'
44
}
55

6+
springBoot {
7+
mainClass = "com.example.Main"
8+
}
9+
610
tasks.withType(JavaCompile) {
711
options.compilerArgs = ['-Xlint:all']
812
}
913

10-
11-
task('javaCompileTasksCompilerArgs') {
12-
doFirst {
13-
tasks.withType(JavaCompile) {
14-
println "${name} compiler args: ${options.compilerArgs}"
14+
gradle.taskGraph.whenReady {
15+
gradle.taskGraph.allTasks.each {
16+
if (it instanceof JavaCompile) {
17+
println "${it.name} compiler args: ${it.options.compilerArgs}"
1518
}
1619
}
1720
}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@ plugins {
33
id 'org.springframework.boot' version '{version}'
44
}
55

6+
springBoot {
7+
mainClass = "com.example.Main"
8+
}
9+
610
tasks.withType(JavaCompile) {
711
options.compilerArgs << '-Xlint:all'
812
}
913

10-
task('javaCompileTasksCompilerArgs') {
11-
doFirst {
12-
tasks.withType(JavaCompile) {
13-
println "${name} compiler args: ${options.compilerArgs}"
14+
gradle.taskGraph.whenReady {
15+
gradle.taskGraph.allTasks.each {
16+
if (it instanceof JavaCompile) {
17+
println "${it.name} compiler args: ${it.options.compilerArgs}"
1418
}
1519
}
1620
}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ plugins {
33
id 'org.springframework.boot' version '{version}'
44
}
55

6-
task('javaCompileTasksCompilerArgs') {
7-
doFirst {
8-
tasks.withType(JavaCompile) {
9-
println "${name} compiler args: ${options.compilerArgs}"
6+
springBoot {
7+
mainClass = "com.example.Main"
8+
}
9+
10+
gradle.taskGraph.whenReady {
11+
gradle.taskGraph.allTasks.each {
12+
if (it instanceof JavaCompile) {
13+
println "${it.name} compiler args: ${it.options.compilerArgs}"
1014
}
1115
}
1216
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
plugins {
2+
id 'org.springframework.boot' version '{version}'
3+
id 'java'
4+
}
5+
6+
springBoot {
7+
mainClass = "com.example.Main"
8+
}
9+
10+
gradle.taskGraph.whenReady {
11+
gradle.taskGraph.allTasks.each {
12+
if (it instanceof JavaCompile) {
13+
println "${it.name} = ${it.options.encoding}"
14+
}
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
plugins {
2+
id 'org.springframework.boot' version '{version}'
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
plugins {
2+
id 'org.springframework.boot' version '{version}'
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
plugins {
2+
id 'org.springframework.boot' version '{version}'
3+
id 'java'
4+
}
5+
6+
springBoot {
7+
mainClass = "com.example.Main"
8+
}
9+
10+
gradle.taskGraph.whenReady {
11+
def attributes = configurations.findByName('productionRuntimeClasspath').attributes
12+
println "${attributes.keySet().size()} productionRuntimeClasspath attributes:"
13+
attributes.keySet().each { attribute ->
14+
println " ${attribute}: ${attributes.getAttribute(attribute)}"
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
plugins {
2+
id 'org.springframework.boot' version '{version}'
3+
id 'java'
4+
}
5+
6+
springBoot {
7+
mainClass = "com.example.Main"
8+
}
9+
10+
gradle.taskGraph.whenReady {
11+
analyzeConfiguration('productionRuntimeClasspath')
12+
analyzeConfiguration('runtimeClasspath')
13+
}
14+
15+
def analyzeConfiguration(String configurationName) {
16+
Configuration configuration = configurations.findByName(configurationName)
17+
println "$configurationName canBeResolved: ${configuration.canBeResolved}"
18+
println "$configurationName canBeConsumed: ${configuration.canBeConsumed}"
19+
}

0 commit comments

Comments
 (0)