From 6823d37408347942f4d97cd75bbefed2edf7188c Mon Sep 17 00:00:00 2001 From: Hyunwoo Jung Date: Wed, 9 Sep 2026 16:22:41 +0900 Subject: [PATCH] Avoid using the deprecated Project.getProperties method Gradle 9.6 deprecates Project.getProperties, which will be removed in Gradle 10. Use ProviderFactory.gradleProperty to read the required properties in AntoraAsciidocAttributes and the image system tests build script. Preserve null handling for missing Antora properties and fall back to the project version when springBootVersion is not configured. Update the provider mocks and add tests for the GraalVM plugin version attribute. Signed-off-by: Hyunwoo Jung See gh-51635 --- .../antora/AntoraAsciidocAttributes.java | 10 ++++---- .../antora/AntoraAsciidocAttributesTests.java | 24 +++++++++++++++++-- .../build.gradle | 7 ++---- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java b/buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java index 636093a33b8..2061a1fc499 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java @@ -26,6 +26,7 @@ import java.util.Properties; import java.util.TreeMap; import org.gradle.api.Project; +import org.gradle.api.provider.ProviderFactory; import org.springframework.boot.build.artifacts.ArtifactRelease; import org.springframework.boot.build.bom.BomExtension; @@ -59,7 +60,7 @@ public class AntoraAsciidocAttributes { private final ResolvedBom resolvedBom; - private final Map projectProperties; + private final ProviderFactory providers; public AntoraAsciidocAttributes(Project project, BomExtension dependencyBom, ResolvedBom resolvedBom) { this.version = String.valueOf(project.getVersion()); @@ -68,7 +69,7 @@ public class AntoraAsciidocAttributes { this.artifactRelease = ArtifactRelease.forProject(project); this.libraries = dependencyBom.getLibraries(); this.resolvedBom = resolvedBom; - this.projectProperties = project.getProperties(); + this.providers = project.getProviders(); } public Map get() { @@ -108,8 +109,9 @@ public class AntoraAsciidocAttributes { private void addVersionAttributes(Map attributes, Map internal) { this.libraries.forEach((library) -> addVersionAttributes(attributes, library)); - attributes.put("version-native-build-tools", (String) this.projectProperties.get("nativeBuildToolsVersion")); - attributes.put("version-graal", (String) this.projectProperties.get("graalVersion")); + attributes.put("version-native-build-tools", + this.providers.gradleProperty("nativeBuildToolsVersion").getOrNull()); + attributes.put("version-graal", this.providers.gradleProperty("graalVersion").getOrNull()); } private void addVersionAttributes(Map attributes, Library library) { diff --git a/buildSrc/src/test/java/org/springframework/boot/build/antora/AntoraAsciidocAttributesTests.java b/buildSrc/src/test/java/org/springframework/boot/build/antora/AntoraAsciidocAttributesTests.java index 8d13b3f36ad..8935b58c634 100644 --- a/buildSrc/src/test/java/org/springframework/boot/build/antora/AntoraAsciidocAttributesTests.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/antora/AntoraAsciidocAttributesTests.java @@ -26,6 +26,8 @@ import java.util.function.Function; import org.gradle.api.Project; import org.gradle.api.plugins.ExtensionContainer; import org.gradle.api.plugins.ExtraPropertiesExtension; +import org.gradle.api.provider.Provider; +import org.gradle.api.provider.ProviderFactory; import org.junit.jupiter.api.Test; import org.springframework.boot.build.bom.BomExtension; @@ -115,6 +117,13 @@ class AntoraAsciidocAttributesTests { assertThat(attributes.get()).containsEntry("version-native-build-tools", "3.4.5"); } + @Test + void versionGraal() { + AntoraAsciidocAttributes attributes = attributes("1.2.3", true, BuildType.OPEN_SOURCE, null, + mockDependencyVersions(), Map.of("graalVersion", "25")); + assertThat(attributes.get()).containsEntry("version-graal", "25"); + } + @Test void urlArtifactRepositoryWhenRelease() { AntoraAsciidocAttributes attributes = attributes("1.2.3", true, BuildType.OPEN_SOURCE, null, @@ -234,7 +243,6 @@ class AntoraAsciidocAttributesTests { assertThat(keys.indexOf("include-java")).isLessThan(keys.indexOf("code-spring-boot-latest")); } - @SuppressWarnings({ "unchecked", "rawtypes" }) private AntoraAsciidocAttributes attributes(String version, boolean latestVersion, BuildType buildType, List libraries, Map dependencyVersions, Map projectProperties) { libraries = (libraries != null) ? libraries : Collections.emptyList(); @@ -246,7 +254,8 @@ class AntoraAsciidocAttributesTests { given(project.findProperty("latestVersion")).willReturn(String.valueOf(latestVersion)); given(project.findProperty("spring.build-type")) .willReturn((buildType == BuildType.OPEN_SOURCE) ? "oss" : "commercial"); - given(project.getProperties()).willReturn((Map) projectProperties); + ProviderFactory providers = mockProviders(projectProperties); + given(project.getProviders()).willReturn(providers); given(project.getExtensions()).willReturn(extensions); given(extensions.getExtraProperties()).willReturn(extraPropertiesExtension); BomExtension dependencyBom = mock(); @@ -262,6 +271,17 @@ class AntoraAsciidocAttributesTests { return new AntoraAsciidocAttributes(project, dependencyBom, resolvedBom); } + private ProviderFactory mockProviders(Map projectProperties) { + ProviderFactory providers = mock(); + given(providers.gradleProperty(any(String.class))).willAnswer((invocation) -> { + String propertyName = invocation.getArgument(0); + Provider provider = mock(); + given(provider.getOrNull()).willReturn(projectProperties.get(propertyName)); + return provider; + }); + return providers; + } + private Library mockLibrary(Map> links) { return mockLibrary(new Links(links), Collections.emptyMap()); } diff --git a/system-test/spring-boot-image-system-tests/build.gradle b/system-test/spring-boot-image-system-tests/build.gradle index 3532f0e826d..dd1080273de 100644 --- a/system-test/spring-boot-image-system-tests/build.gradle +++ b/system-test/spring-boot-image-system-tests/build.gradle @@ -35,11 +35,8 @@ tasks.register("syncMavenRepository", Sync) { systemTest { dependsOn syncMavenRepository - if (project.hasProperty("springBootVersion")) { - systemProperty "springBootVersion", project.properties["springBootVersion"] - } else { - systemProperty "springBootVersion", project.getVersion() - } + systemProperty "springBootVersion", + providers.gradleProperty("springBootVersion").getOrElse(project.getVersion().toString()) } dependencies {