diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 25a8aa76144..0e2556ccf0f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,12 +22,12 @@ jobs: - version: 17 toolchain: false - version: 21 - toolchain: true + toolchain: false - version: 22 - toolchain: true + toolchain: false - version: 23 early-access: true - toolchain: true + toolchain: false exclude: - os: name: Linux diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 4c5ea71768d..ccc689e54af 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -10,8 +10,11 @@ repositories { gradlePluginPortal() } -sourceCompatibility = 17 -targetCompatibility = 17 +java { + sourceCompatibility = 17 + targetCompatibility = 17 +} + def versions = [:] new File(projectDir.parentFile, "gradle.properties").withInputStream { diff --git a/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java index 9975dcfca55..f87f576c68b 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java @@ -51,7 +51,7 @@ class KotlinConventions { void apply(Project project) { project.getPlugins().withId("org.jetbrains.kotlin.jvm", (plugin) -> { project.getTasks().withType(KotlinCompile.class, this::configure); - configureDokkatoo(project); + project.getPlugins().withType(DokkatooHtmlPlugin.class, (dokkatooPlugin) -> configureDokkatoo(project)); }); } @@ -67,7 +67,6 @@ class KotlinConventions { } private void configureDokkatoo(Project project) { - project.getPlugins().apply(DokkatooHtmlPlugin.class); DokkatooExtension dokkatoo = project.getExtensions().getByType(DokkatooExtension.class); dokkatoo.getDokkatooSourceSets().named(SourceSet.MAIN_SOURCE_SET_NAME).configure((sourceSet) -> { sourceSet.getSourceRoots().setFrom(project.file("src/main/kotlin")); diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java index 840665d78d4..3778b177a63 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/InteractiveUpgradeResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.boot.build.bom.bomr; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -58,12 +59,17 @@ public final class InteractiveUpgradeResolver implements UpgradeResolver { if (libraryWithVersionOptions.getVersionOptions().isEmpty()) { return null; } - VersionOption current = new VersionOption(libraryWithVersionOptions.getLibrary().getVersion().getVersion()); - VersionOption selected = this.userInputHandler.selectOption( - libraryWithVersionOptions.getLibrary().getName() + " " - + libraryWithVersionOptions.getLibrary().getVersion().getVersion(), - libraryWithVersionOptions.getVersionOptions(), current); - return (selected.equals(current)) ? null + VersionOption defaultOption = new VersionOption( + libraryWithVersionOptions.getLibrary().getVersion().getVersion()); + VersionOption selected = this.userInputHandler.askUser((questions) -> { + String question = libraryWithVersionOptions.getLibrary().getName() + " " + + libraryWithVersionOptions.getLibrary().getVersion().getVersion(); + List options = new ArrayList<>(); + options.add(defaultOption); + options.addAll(libraryWithVersionOptions.getVersionOptions()); + return questions.selectOption(question, options, defaultOption); + }).get(); + return (selected.equals(defaultOption)) ? null : new Upgrade(libraryWithVersionOptions.getLibrary(), selected.getVersion()); } diff --git a/buildSrc/src/main/java/org/springframework/boot/build/test/DockerTestPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/test/DockerTestPlugin.java index 017ca001a43..d46a68a41fa 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/test/DockerTestPlugin.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/test/DockerTestPlugin.java @@ -71,6 +71,8 @@ public class DockerTestPlugin implements Plugin { .add(project.getConfigurations() .getByName(dockerTestSourceSet.getRuntimeClasspathConfigurationName()))); }); + project.getDependencies() + .add(dockerTestSourceSet.getRuntimeOnlyConfigurationName(), "org.junit.platform:junit-platform-launcher"); } private SourceSet createSourceSet(Project project) { diff --git a/buildSrc/src/main/java/org/springframework/boot/build/test/IntegrationTestPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/test/IntegrationTestPlugin.java index 6286df7601c..34ff445b889 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/test/IntegrationTestPlugin.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/test/IntegrationTestPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -58,6 +58,8 @@ public class IntegrationTestPlugin implements Plugin { eclipse.classpath((classpath) -> classpath.getPlusConfigurations() .add(project.getConfigurations().getByName(intTestSourceSet.getRuntimeClasspathConfigurationName()))); }); + project.getDependencies() + .add(intTestSourceSet.getRuntimeOnlyConfigurationName(), "org.junit.platform:junit-platform-launcher"); } private SourceSet createSourceSet(Project project) { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd491770..a4b76b9530d 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3e593191a33..9355b415575 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a42690..f5feea6d6b1 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30dbdee..9d21a21834d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle index f52902b0875..649eb13a5ce 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle @@ -203,6 +203,8 @@ tasks.named("test") { } def documentationTest = tasks.register("documentationTest", Test) { + testClassesDirs = testing.suites.test.sources.output.classesDirs + classpath = testing.suites.test.sources.runtimeClasspath jvmArgs += "--add-opens=java.base/java.net=ALL-UNNAMED" filter { includeTestsMatching("org.springframework.boot.actuate.autoconfigure.endpoint.web.documentation.*") diff --git a/spring-boot-project/spring-boot-docs/build.gradle b/spring-boot-project/spring-boot-docs/build.gradle index 53a6c6bd9a7..1d74605652d 100644 --- a/spring-boot-project/spring-boot-docs/build.gradle +++ b/spring-boot-project/spring-boot-docs/build.gradle @@ -1,4 +1,5 @@ plugins { + id "dev.adamko.dokkatoo-html" id "java" id "org.antora" id "org.springframework.boot.conventions" @@ -43,7 +44,7 @@ sourcesJar { } plugins.withType(EclipsePlugin) { - extensions.getByType(org.gradle.plugins.ide.eclipse.model.EclipseModel).classpath { classpath -> + eclipse.classpath { classpath -> classpath.plusConfigurations.add(configurations.getByName(sourceSets.main.runtimeClasspathConfigurationName)) } } diff --git a/spring-boot-project/spring-boot-test/build.gradle b/spring-boot-project/spring-boot-test/build.gradle index 1274c3f36b9..f35e8d38f56 100644 --- a/spring-boot-project/spring-boot-test/build.gradle +++ b/spring-boot-project/spring-boot-test/build.gradle @@ -1,4 +1,5 @@ plugins { + id "dev.adamko.dokkatoo-html" id "java-library" id "org.jetbrains.kotlin.jvm" id "org.springframework.boot.conventions" diff --git a/spring-boot-project/spring-boot-tools/spring-boot-cli/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-cli/build.gradle index bf42c681621..90d2420d6c1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-cli/build.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-cli/build.gradle @@ -82,11 +82,11 @@ def configureArchive(archive) { into "lib/" } archive.from(file("src/main/content")) { - dirMode = 0755 - fileMode = 0644 + dirPermissions { unix(0755) } + filePermissions { unix(0644) } } archive.from(file("src/main/executablecontent")) { - fileMode = 0755 + filePermissions { unix(0755) } } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle index 43400fa00f4..4f4fdcedf02 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle @@ -140,10 +140,6 @@ artifacts { antoraContent antoraGradlePluginCatalogContent } -toolchain { - maximumCompatibleJavaVersion = JavaLanguageVersion.of(20) -} - plugins.withType(EclipsePlugin) { eclipse { classpath.file { merger -> diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java index f87b6fe5fce..b767735ed3b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java @@ -19,10 +19,8 @@ package org.springframework.boot.gradle.plugin; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringWriter; -import java.lang.reflect.Method; import java.util.concurrent.Callable; -import org.gradle.api.Action; import org.gradle.api.GradleException; import org.gradle.api.Plugin; import org.gradle.api.Project; @@ -128,32 +126,16 @@ final class ApplicationPluginAction implements PluginApplicationAction { private void configureFilePermissions(CopySpec copySpec, int mode) { if (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) { - try { - Method filePermissions = copySpec.getClass().getMethod("filePermissions", Action.class); - filePermissions.invoke(copySpec, new Action<>() { - - @Override - public void execute(Object filePermissions) { - String unixPermissions = Integer.toString(mode, 8); - try { - Method unix = filePermissions.getClass().getMethod("unix", String.class); - unix.invoke(filePermissions, unixPermissions); - } - catch (Exception ex) { - throw new GradleException("Failed to set file permissions to '" + unixPermissions + "'", - ex); - } - } - - }); - } - catch (Exception ex) { - throw new GradleException("Failed to set file permissions", ex); - } + copySpec.filePermissions((filePermissions) -> filePermissions.unix(Integer.toString(mode, 8))); } else { - copySpec.setFileMode(mode); + configureFileMode(copySpec, mode); } } + @SuppressWarnings("deprecation") + private void configureFileMode(CopySpec copySpec, int mode) { + copySpec.setFileMode(mode); + } + } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchiveSupport.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchiveSupport.java index 6cdd36d5f2a..437547bf943 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchiveSupport.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootArchiveSupport.java @@ -26,9 +26,8 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.function.Function; -import java.util.function.Supplier; -import org.gradle.api.GradleException; +import org.gradle.api.file.ConfigurableFilePermissions; import org.gradle.api.file.CopySpec; import org.gradle.api.file.FileCopyDetails; import org.gradle.api.file.FileTreeElement; @@ -133,8 +132,8 @@ class BootArchiveSupport { File output = jar.getArchiveFile().get().getAsFile(); Manifest manifest = jar.getManifest(); boolean preserveFileTimestamps = jar.isPreserveFileTimestamps(); - Integer dirMode = getDirMode(jar); - Integer fileMode = getFileMode(jar); + Integer dirPermissions = getUnixNumericDirPermissions(jar); + Integer filePermissions = getUnixNumericFilePermissions(jar); boolean includeDefaultLoader = isUsingDefaultLoader(jar); Spec requiresUnpack = this.requiresUnpack.getAsSpec(); Spec exclusions = this.exclusions.getAsExcludeSpec(); @@ -142,35 +141,35 @@ class BootArchiveSupport { Spec librarySpec = this.librarySpec; Function compressionResolver = this.compressionResolver; String encoding = jar.getMetadataCharset(); - CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirMode, fileMode, - includeDefaultLoader, jarmodeToolsLocation, requiresUnpack, exclusions, launchScript, librarySpec, - compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver, + CopyAction action = new BootZipCopyAction(output, manifest, preserveFileTimestamps, dirPermissions, + filePermissions, includeDefaultLoader, jarmodeToolsLocation, requiresUnpack, exclusions, launchScript, + librarySpec, compressionResolver, encoding, resolvedDependencies, supportsSignatureFile, layerResolver, loaderImplementation); return jar.isReproducibleFileOrder() ? new ReproducibleOrderingCopyAction(action) : action; } - private Integer getDirMode(CopySpec copySpec) { - return getMode(copySpec, "getDirPermissions", () -> copySpec.getDirMode()); + private Integer getUnixNumericDirPermissions(CopySpec copySpec) { + return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) + ? asUnixNumeric(copySpec.getDirPermissions()) : getDirMode(copySpec); } - private Integer getFileMode(CopySpec copySpec) { - return getMode(copySpec, "getFilePermissions", () -> copySpec.getFileMode()); + private Integer getUnixNumericFilePermissions(CopySpec copySpec) { + return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) + ? asUnixNumeric(copySpec.getFilePermissions()) : getFileMode(copySpec); } - @SuppressWarnings("unchecked") - private Integer getMode(CopySpec copySpec, String methodName, Supplier fallback) { - if (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) { - try { - Object filePermissions = ((Property) copySpec.getClass().getMethod(methodName).invoke(copySpec)) - .getOrNull(); - return (filePermissions != null) - ? (int) filePermissions.getClass().getMethod("toUnixNumeric").invoke(filePermissions) : null; - } - catch (Exception ex) { - throw new GradleException("Failed to get permissions", ex); - } - } - return fallback.get(); + private Integer asUnixNumeric(Property permissions) { + return permissions.isPresent() ? permissions.get().toUnixNumeric() : null; + } + + @SuppressWarnings("deprecation") + private Integer getDirMode(CopySpec copySpec) { + return copySpec.getDirMode(); + } + + @SuppressWarnings("deprecation") + private Integer getFileMode(CopySpec copySpec) { + return copySpec.getFileMode(); } private boolean isUsingDefaultLoader(Jar jar) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java index 60bcebc0492..fdde482b7e2 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootZipCopyAction.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; -import java.lang.reflect.Method; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.Collection; @@ -488,17 +487,12 @@ class BootZipCopyAction implements CopyAction { } private int getPermissions(FileCopyDetails details) { - if (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) { - try { - Method getPermissionsMethod = details.getClass().getMethod("getPermissions"); - getPermissionsMethod.setAccessible(true); - Object permissions = getPermissionsMethod.invoke(details); - return (int) permissions.getClass().getMethod("toUnixNumeric").invoke(permissions); - } - catch (Exception ex) { - throw new GradleException("Failed to get permissions", ex); - } - } + return (GradleVersion.current().compareTo(GradleVersion.version("8.3")) >= 0) + ? details.getPermissions().toUnixNumeric() : getMode(details); + } + + @SuppressWarnings("deprecation") + private int getMode(FileCopyDetails details) { return details.getMode(); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java index 9f7a01053ab..fc7277a3081 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java @@ -21,6 +21,7 @@ import java.io.File; import org.gradle.api.JavaVersion; import org.gradle.api.Project; import org.gradle.internal.nativeintegration.services.NativeServices; +import org.gradle.internal.nativeintegration.services.NativeServices.NativeServicesMode; import org.gradle.testfixtures.ProjectBuilder; import org.gradle.testfixtures.internal.ProjectBuilderImpl; @@ -68,7 +69,7 @@ public final class GradleProjectBuilder { builder.withName(this.name); } if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17)) { - NativeServices.initializeOnClient(userHome); + NativeServices.initializeOnClient(userHome, NativeServicesMode.ENABLED); try { ProjectBuilderImpl.getGlobalServices(); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java index ab32302702f..0725a6ab56f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java @@ -82,7 +82,7 @@ class KotlinPluginActionIntegrationTests { configured.add(line.substring("Configuring :".length())); } } - assertThat(configured).containsExactlyInAnyOrder("help", "clean"); + assertThat(configured).containsExactlyInAnyOrder("help", "compileJava", "clean"); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java index 538c385418c..d5143117e7e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfoTests.java @@ -176,7 +176,7 @@ class BuildInfoTests { Project project = GradleProjectBuilder.builder().withProjectDir(projectDir).withName(projectName).build(); ((ProjectInternal) project).getServices() .get(GradlePropertiesController.class) - .loadGradlePropertiesFrom(projectDir); + .loadGradlePropertiesFrom(projectDir, false); return project; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleVersions.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleVersions.java index 7a1d9f53b2d..17998b00280 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleVersions.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleVersions.java @@ -33,10 +33,16 @@ public final class GradleVersions { } public static List allCompatible() { - if (isJavaVersion(JavaVersion.VERSION_20)) { - return Arrays.asList("8.3", "8.10"); + if (isJavaVersion(JavaVersion.VERSION_23)) { + return Arrays.asList(GradleVersion.current().getVersion()); } - return Arrays.asList(GradleVersion.current().getVersion(), "8.3", "8.10"); + if (isJavaVersion(JavaVersion.VERSION_22)) { + return Arrays.asList("8.8", GradleVersion.current().getVersion()); + } + if (isJavaVersion(JavaVersion.VERSION_21)) { + return Arrays.asList("8.5", GradleVersion.current().getVersion()); + } + return Arrays.asList("7.6.4", "8.3", GradleVersion.current().getVersion()); } public static String minimumCompatible() { diff --git a/spring-boot-project/spring-boot/build.gradle b/spring-boot-project/spring-boot/build.gradle index 00af80f2250..6f9380364c6 100644 --- a/spring-boot-project/spring-boot/build.gradle +++ b/spring-boot-project/spring-boot/build.gradle @@ -1,4 +1,5 @@ plugins { + id "dev.adamko.dokkatoo-html" id "java-library" id "org.jetbrains.kotlin.jvm" id "org.springframework.boot.conventions" diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/build.gradle index 887497b056e..6e5dcd3193f 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/build.gradle +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-cache/build.gradle @@ -59,27 +59,32 @@ dependencies { def testCaffeine = tasks.register("testCaffeine", Test) { description = "Runs the tests against Caffeine" classpath = sourceSets.test.runtimeClasspath + configurations.caffeine + testClassesDirs = testing.suites.test.sources.output.classesDirs } def testCouchbase = tasks.register("testCouchbase", Test) { description = "Runs the tests against Couchbase" classpath = sourceSets.test.runtimeClasspath + configurations.couchbase + testClassesDirs = testing.suites.test.sources.output.classesDirs } def testEhcache = tasks.register("testEhcache", Test) { description = "Runs the tests against Ehcache" classpath = sourceSets.test.runtimeClasspath + configurations.ehcache + testClassesDirs = testing.suites.test.sources.output.classesDirs systemProperties = ["spring.cache.jcache.config" : "classpath:ehcache3.xml"] } def testHazelcast = tasks.register("testHazelcast", Test) { description = "Runs the tests against Hazelcast" classpath = sourceSets.test.runtimeClasspath + configurations.hazelcast + testClassesDirs = testing.suites.test.sources.output.classesDirs } def testInfinispan = tasks.register("testInfinispan", Test) { description = "Runs the tests against Infinispan" classpath = sourceSets.test.runtimeClasspath + configurations.infinispan + testClassesDirs = testing.suites.test.sources.output.classesDirs systemProperties = ["spring.cache.jcache.config" : "classpath:infinispan.xml"] }