Skip to content

Commit 1a4f5ab

Browse files
committed
Merge branch '3.3.x'
Closes gh-42358
2 parents 713afae + 4a6793e commit 1a4f5ab

File tree

9 files changed

+132
-88
lines changed

9 files changed

+132
-88
lines changed

Diff for: spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle

+11
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,21 @@ dependencies {
4747

4848
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-gradle-test-support"))
4949
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))
50+
testImplementation("com.fasterxml.jackson.core:jackson-databind")
51+
testImplementation("com.fasterxml.jackson.module:jackson-module-parameter-names")
5052
testImplementation("com.tngtech.archunit:archunit-junit5:0.22.0")
53+
testImplementation("net.java.dev.jna:jna-platform")
54+
testImplementation("org.apache.commons:commons-compress")
55+
testImplementation("org.apache.httpcomponents.client5:httpclient5")
5156
testImplementation("org.assertj:assertj-core")
57+
testImplementation("org.graalvm.buildtools:native-gradle-plugin")
58+
testImplementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
59+
testImplementation("org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion")
60+
testImplementation("org.jetbrains.kotlin:kotlin-compiler-runner:$kotlinVersion")
61+
testImplementation("org.jetbrains.kotlin:kotlin-daemon-client:$kotlinVersion")
5262
testImplementation("org.junit.jupiter:junit-jupiter")
5363
testImplementation("org.mockito:mockito-core")
64+
testImplementation("org.tomlj:tomlj:1.0.0")
5465
}
5566

5667
repositories {

Diff for: 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
}

Diff for: 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

Diff for: 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() {
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+
}

Diff for: spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/build.gradle

+1-16
Original file line numberDiff line numberDiff line change
@@ -9,22 +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"))
14-
implementation("com.fasterxml.jackson.core:jackson-databind")
15-
implementation("com.fasterxml.jackson.module:jackson-module-parameter-names")
1612
implementation("io.spring.gradle:dependency-management-plugin")
17-
implementation("net.java.dev.jna:jna-platform")
18-
implementation("org.graalvm.buildtools:native-gradle-plugin")
19-
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
20-
implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion")
21-
implementation("org.jetbrains.kotlin:kotlin-compiler-runner:$kotlinVersion")
22-
implementation("org.jetbrains.kotlin:kotlin-daemon-client:$kotlinVersion")
23-
implementation("org.apache.commons:commons-compress")
24-
implementation("org.apache.commons:commons-compress")
25-
implementation("org.apache.httpcomponents.client5:httpclient5")
26-
implementation("org.springframework:spring-core")
27-
implementation("org.tomlj:tomlj:1.0.0")
28-
2913
implementation("org.assertj:assertj-core")
14+
implementation("org.springframework:spring-core")
3015
}

Diff for: 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);

Diff for: spring-boot-system-tests/spring-boot-image-tests/build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ dependencies {
3636
}
3737

3838
systemTestImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test"))
39-
systemTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-gradle-plugin"))
4039
systemTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-gradle-test-support"))
4140
systemTestImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-buildpack-platform"))
4241
systemTestImplementation(gradleTestKit())

Diff for: spring-boot-system-tests/spring-boot-image-tests/src/systemTest/resources/org/springframework/boot/image/paketo/PaketoBuilderTests-nativeApp.gradle

+1-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ bootJar {
2828
manifest {
2929
attributes(
3030
'Implementation-Version': '1.0.0',
31-
'Implementation-Title': 'Paketo Test',
32-
// This shouldn't be necessary.
33-
// See https://github.com/spring-projects/spring-boot/issues/42338
34-
'Spring-Boot-Native-Processed': 'true'
31+
'Implementation-Title': 'Paketo Test'
3532
)
3633
}
3734
}

0 commit comments

Comments
 (0)