Skip to content

Commit 4a6793e

Browse files
committed
Merge branch '3.2.x' into 3.3.x
Closes gh-42357
2 parents 23f064d + 1240c59 commit 4a6793e

File tree

9 files changed

+133
-78
lines changed

9 files changed

+133
-78
lines changed

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle

+11
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,21 @@ dependencies {
9494

9595
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-gradle-test-support"))
9696
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))
97+
testImplementation("com.fasterxml.jackson.core:jackson-databind")
98+
testImplementation("com.fasterxml.jackson.module:jackson-module-parameter-names")
9799
testImplementation("com.tngtech.archunit:archunit-junit5:0.22.0")
100+
testImplementation("net.java.dev.jna:jna-platform")
101+
testImplementation("org.apache.commons:commons-compress")
102+
testImplementation("org.apache.httpcomponents.client5:httpclient5")
98103
testImplementation("org.assertj:assertj-core")
104+
testImplementation("org.graalvm.buildtools:native-gradle-plugin")
105+
testImplementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
106+
testImplementation("org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion")
107+
testImplementation("org.jetbrains.kotlin:kotlin-compiler-runner:$kotlinVersion")
108+
testImplementation("org.jetbrains.kotlin:kotlin-daemon-client:$kotlinVersion")
99109
testImplementation("org.junit.jupiter:junit-jupiter")
100110
testImplementation("org.mockito:mockito-core")
111+
testImplementation("org.tomlj:tomlj:1.0.0")
101112
}
102113

103114
repositories {

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;
3232
import org.junit.platform.commons.util.AnnotationUtils;
3333

34+
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
3435
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
3536
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
3637
import org.springframework.boot.testsupport.gradle.testkit.GradleVersions;
@@ -96,7 +97,7 @@ public String getDisplayName(int invocationIndex) {
9697

9798
@Override
9899
public List<Extension> getAdditionalExtensions() {
99-
GradleBuild gradleBuild = new GradleBuild().gradleVersion(this.gradleVersion);
100+
GradleBuild gradleBuild = new PluginClasspathGradleBuild().gradleVersion(this.gradleVersion);
100101
if (this.configurationCache) {
101102
gradleBuild.configurationCache();
102103
}

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.junit.jupiter.api.extension.TestTemplateInvocationContext;
2727
import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;
2828

29+
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
2930
import org.springframework.boot.testsupport.gradle.testkit.Dsl;
3031
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
3132
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
@@ -60,8 +61,8 @@ private static final class DslTestTemplateInvocationContext implements TestTempl
6061

6162
@Override
6263
public List<Extension> getAdditionalExtensions() {
63-
GradleBuild gradleBuild = new GradleBuild(this.dsl);
64-
gradleBuild.gradleVersion(GradleVersions.minimumCompatible());
64+
GradleBuild gradleBuild = new PluginClasspathGradleBuild(this.dsl)
65+
.gradleVersion(GradleVersions.minimumCompatible());
6566
return Arrays.asList(new GradleBuildFieldSetter(gradleBuild), new GradleBuildExtension());
6667
}
6768

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.junit.jupiter.api.condition.JRE;
2929
import org.junit.jupiter.api.extension.ExtendWith;
3030

31+
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
3132
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
3233
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
3334

@@ -42,7 +43,7 @@
4243
@ExtendWith(GradleBuildExtension.class)
4344
class KotlinPluginActionIntegrationTests {
4445

45-
GradleBuild gradleBuild = new GradleBuild();
46+
GradleBuild gradleBuild = new PluginClasspathGradleBuild();
4647

4748
@Test
4849
void noKotlinVersionPropertyWithoutKotlinPlugin() {

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.junit.jupiter.api.condition.JRE;
2323
import org.junit.jupiter.api.extension.ExtendWith;
2424

25+
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
2526
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
2627
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
2728

@@ -35,7 +36,7 @@
3536
@ExtendWith(GradleBuildExtension.class)
3637
class SpringBootPluginIntegrationTests {
3738

38-
final GradleBuild gradleBuild = new GradleBuild();
39+
final GradleBuild gradleBuild = new PluginClasspathGradleBuild();
3940

4041
@Test
4142
@DisabledForJreRange(min = JRE.JAVA_20)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/*
2+
* Copyright 2012-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.gradle.testkit;
18+
19+
import java.io.File;
20+
import java.io.IOException;
21+
import java.util.Arrays;
22+
import java.util.List;
23+
24+
import com.fasterxml.jackson.annotation.JsonView;
25+
import com.fasterxml.jackson.core.Versioned;
26+
import com.fasterxml.jackson.databind.Module;
27+
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
28+
import com.sun.jna.Platform;
29+
import io.spring.gradle.dependencymanagement.DependencyManagementPlugin;
30+
import org.antlr.v4.runtime.Lexer;
31+
import org.apache.commons.compress.archivers.ArchiveEntry;
32+
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
33+
import org.apache.hc.core5.http.HttpRequest;
34+
import org.apache.hc.core5.http2.HttpVersionPolicy;
35+
import org.gradle.testkit.runner.GradleRunner;
36+
import org.jetbrains.kotlin.gradle.model.KotlinProject;
37+
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin;
38+
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformJvmPlugin;
39+
import org.jetbrains.kotlin.project.model.LanguageSettings;
40+
import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion;
41+
import org.tomlj.Toml;
42+
43+
import org.springframework.asm.ClassVisitor;
44+
import org.springframework.boot.buildpack.platform.build.BuildRequest;
45+
import org.springframework.boot.loader.tools.LaunchScript;
46+
import org.springframework.boot.testsupport.gradle.testkit.Dsl;
47+
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
48+
49+
/**
50+
* Custom {@link GradleBuild} that configures the
51+
* {@link GradleRunner#withPluginClasspath(Iterable) plugin classpath}.
52+
*
53+
* @author Andy Wilkinson
54+
* @author Scott Frederick
55+
*/
56+
public class PluginClasspathGradleBuild extends GradleBuild {
57+
58+
public PluginClasspathGradleBuild() {
59+
super();
60+
}
61+
62+
public PluginClasspathGradleBuild(Dsl dsl) {
63+
super(dsl);
64+
}
65+
66+
@Override
67+
public GradleRunner prepareRunner(String... arguments) throws IOException {
68+
return super.prepareRunner(arguments).withPluginClasspath(pluginClasspath());
69+
}
70+
71+
private List<File> pluginClasspath() {
72+
return Arrays.asList(new File("bin/main"), new File("build/classes/java/main"),
73+
new File("build/resources/main"), new File(pathOfJarContaining(LaunchScript.class)),
74+
new File(pathOfJarContaining(ClassVisitor.class)),
75+
new File(pathOfJarContaining(DependencyManagementPlugin.class)),
76+
new File(pathOfJarContaining("org.jetbrains.kotlin.cli.common.PropertiesKt")),
77+
new File(pathOfJarContaining(KotlinPlatformJvmPlugin.class)),
78+
new File(pathOfJarContaining(KotlinProject.class)),
79+
new File(pathOfJarContaining(KotlinToolingVersion.class)),
80+
new File(pathOfJarContaining("org.jetbrains.kotlin.daemon.client.KotlinCompilerClient")),
81+
new File(pathOfJarContaining(KotlinCompilerPluginSupportPlugin.class)),
82+
new File(pathOfJarContaining(LanguageSettings.class)),
83+
new File(pathOfJarContaining(ArchiveEntry.class)), new File(pathOfJarContaining(BuildRequest.class)),
84+
new File(pathOfJarContaining(HttpClientConnectionManager.class)),
85+
new File(pathOfJarContaining(HttpRequest.class)),
86+
new File(pathOfJarContaining(HttpVersionPolicy.class)), new File(pathOfJarContaining(Module.class)),
87+
new File(pathOfJarContaining(Versioned.class)),
88+
new File(pathOfJarContaining(ParameterNamesModule.class)),
89+
new File(pathOfJarContaining(JsonView.class)), new File(pathOfJarContaining(Platform.class)),
90+
new File(pathOfJarContaining(Toml.class)), new File(pathOfJarContaining(Lexer.class)),
91+
new File(pathOfJarContaining("org.graalvm.buildtools.gradle.NativeImagePlugin")),
92+
new File(pathOfJarContaining("org.graalvm.reachability.GraalVMReachabilityMetadataRepository")),
93+
new File(pathOfJarContaining("org.graalvm.buildtools.utils.SharedConstants")));
94+
}
95+
96+
private String pathOfJarContaining(String className) {
97+
try {
98+
return pathOfJarContaining(Class.forName(className));
99+
}
100+
catch (ClassNotFoundException ex) {
101+
throw new IllegalArgumentException(ex);
102+
}
103+
}
104+
105+
private String pathOfJarContaining(Class<?> type) {
106+
return type.getProtectionDomain().getCodeSource().getLocation().getPath();
107+
}
108+
109+
}

spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/build.gradle

+1-9
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,7 @@ dependencies {
99
compileOnly("org.junit.jupiter:junit-jupiter")
1010

1111
implementation(gradleTestKit())
12-
implementation(project(":spring-boot-project:spring-boot-tools:spring-boot-buildpack-platform"))
13-
implementation(project(":spring-boot-project:spring-boot-tools:spring-boot-loader-tools"))
1412
implementation("io.spring.gradle:dependency-management-plugin")
15-
implementation("org.graalvm.buildtools:native-gradle-plugin")
16-
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
17-
implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion")
18-
implementation("org.jetbrains.kotlin:kotlin-compiler-runner:$kotlinVersion")
19-
implementation("org.jetbrains.kotlin:kotlin-daemon-client:$kotlinVersion")
20-
implementation("org.apache.commons:commons-compress")
21-
2213
implementation("org.assertj:assertj-core")
14+
implementation("org.springframework:spring-core")
2315
}

spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleBuild.java

+3-63
Original file line numberDiff line numberDiff line change
@@ -32,31 +32,11 @@
3232
import java.util.Properties;
3333
import java.util.jar.JarFile;
3434

35-
import com.fasterxml.jackson.annotation.JsonView;
36-
import com.fasterxml.jackson.core.Versioned;
37-
import com.fasterxml.jackson.databind.Module;
38-
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
39-
import com.sun.jna.Platform;
40-
import io.spring.gradle.dependencymanagement.DependencyManagementPlugin;
4135
import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension;
42-
import org.antlr.v4.runtime.Lexer;
43-
import org.apache.commons.compress.archivers.ArchiveEntry;
44-
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
45-
import org.apache.hc.core5.http.HttpRequest;
46-
import org.apache.hc.core5.http2.HttpVersionPolicy;
4736
import org.gradle.testkit.runner.BuildResult;
4837
import org.gradle.testkit.runner.GradleRunner;
4938
import org.gradle.util.GradleVersion;
50-
import org.jetbrains.kotlin.gradle.model.KotlinProject;
51-
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin;
52-
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformJvmPlugin;
53-
import org.jetbrains.kotlin.project.model.LanguageSettings;
54-
import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion;
55-
import org.tomlj.Toml;
56-
57-
import org.springframework.asm.ClassVisitor;
58-
import org.springframework.boot.buildpack.platform.build.BuildRequest;
59-
import org.springframework.boot.loader.tools.LaunchScript;
39+
6040
import org.springframework.util.FileCopyUtils;
6141
import org.springframework.util.FileSystemUtils;
6242

@@ -95,7 +75,7 @@ public GradleBuild() {
9575
this(Dsl.GROOVY);
9676
}
9777

98-
public GradleBuild(Dsl dsl) {
78+
protected GradleBuild(Dsl dsl) {
9979
this.dsl = dsl;
10080
}
10181

@@ -112,44 +92,6 @@ void after() {
11292
FileSystemUtils.deleteRecursively(this.projectDir);
11393
}
11494

115-
private List<File> pluginClasspath() {
116-
return Arrays.asList(new File("bin/main"), new File("build/classes/java/main"),
117-
new File("build/resources/main"), new File(pathOfJarContaining(LaunchScript.class)),
118-
new File(pathOfJarContaining(ClassVisitor.class)),
119-
new File(pathOfJarContaining(DependencyManagementPlugin.class)),
120-
new File(pathOfJarContaining("org.jetbrains.kotlin.cli.common.PropertiesKt")),
121-
new File(pathOfJarContaining(KotlinPlatformJvmPlugin.class)),
122-
new File(pathOfJarContaining(KotlinProject.class)),
123-
new File(pathOfJarContaining(KotlinToolingVersion.class)),
124-
new File(pathOfJarContaining("org.jetbrains.kotlin.daemon.client.KotlinCompilerClient")),
125-
new File(pathOfJarContaining(KotlinCompilerPluginSupportPlugin.class)),
126-
new File(pathOfJarContaining(LanguageSettings.class)),
127-
new File(pathOfJarContaining(ArchiveEntry.class)), new File(pathOfJarContaining(BuildRequest.class)),
128-
new File(pathOfJarContaining(HttpClientConnectionManager.class)),
129-
new File(pathOfJarContaining(HttpRequest.class)),
130-
new File(pathOfJarContaining(HttpVersionPolicy.class)), new File(pathOfJarContaining(Module.class)),
131-
new File(pathOfJarContaining(Versioned.class)),
132-
new File(pathOfJarContaining(ParameterNamesModule.class)),
133-
new File(pathOfJarContaining(JsonView.class)), new File(pathOfJarContaining(Platform.class)),
134-
new File(pathOfJarContaining(Toml.class)), new File(pathOfJarContaining(Lexer.class)),
135-
new File(pathOfJarContaining("org.graalvm.buildtools.gradle.NativeImagePlugin")),
136-
new File(pathOfJarContaining("org.graalvm.reachability.GraalVMReachabilityMetadataRepository")),
137-
new File(pathOfJarContaining("org.graalvm.buildtools.utils.SharedConstants")));
138-
}
139-
140-
private String pathOfJarContaining(String className) {
141-
try {
142-
return pathOfJarContaining(Class.forName(className));
143-
}
144-
catch (ClassNotFoundException ex) {
145-
throw new IllegalArgumentException(ex);
146-
}
147-
}
148-
149-
private String pathOfJarContaining(Class<?> type) {
150-
return type.getProtectionDomain().getCodeSource().getLocation().getPath();
151-
}
152-
15395
public GradleBuild script(String script) {
15496
this.script = script.endsWith(this.dsl.getExtension()) ? script : script + this.dsl.getExtension();
15597
return this;
@@ -230,9 +172,7 @@ public GradleRunner prepareRunner(String... arguments) throws IOException {
230172
if (repository.exists()) {
231173
FileSystemUtils.copyRecursively(repository, new File(this.projectDir, "repository"));
232174
}
233-
GradleRunner gradleRunner = GradleRunner.create()
234-
.withProjectDir(this.projectDir)
235-
.withPluginClasspath(pluginClasspath());
175+
GradleRunner gradleRunner = GradleRunner.create().withProjectDir(this.projectDir);
236176
if (!this.configurationCache) {
237177
// See https://github.com/gradle/gradle/issues/14125
238178
gradleRunner.withDebug(true);

spring-boot-system-tests/spring-boot-image-tests/build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ dependencies {
5252
}
5353

5454
systemTestImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test"))
55-
systemTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-gradle-plugin"))
5655
systemTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-gradle-test-support"))
5756
systemTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-buildpack-platform"))
5857
systemTestImplementation(gradleTestKit())

0 commit comments

Comments
 (0)