From 78375834845f4f17111d763bc48e9a9d3f4dde84 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 17 Nov 2025 17:57:02 -0800 Subject: [PATCH] Add credentials to ivy settings to support commercial builds Closes gh-46824 --- .../RepositoryTransformersExtension.java | 29 +++++++++++++++++-- .../src/it/sample/ivysettings.xml | 4 +-- .../ivysettings.xml | 2 +- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/RepositoryTransformersExtension.java b/buildSrc/src/main/java/org/springframework/boot/build/RepositoryTransformersExtension.java index d77fed6556c..74772a8ef44 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/RepositoryTransformersExtension.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/RepositoryTransformersExtension.java @@ -20,7 +20,9 @@ import java.net.URI; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.function.BiFunction; import java.util.function.Function; @@ -37,6 +39,8 @@ import org.gradle.api.artifacts.repositories.MavenArtifactRepository; */ public class RepositoryTransformersExtension { + private static final String CREDENTIALS_MARKER = "{spring.mavenCredentials}"; + private static final String REPOSITORIES_MARKER = "{spring.mavenRepositories}"; private static final String PLUGIN_REPOSITORIES_MARKER = "{spring.mavenPluginRepositories}"; @@ -60,6 +64,19 @@ public class RepositoryTransformersExtension { return "%s".formatted(indent, name, url); }); } + if (line.contains(CREDENTIALS_MARKER)) { + Map hostCredentials = new LinkedHashMap<>(); + getSpringRepositories().forEach((repository) -> { + if (repository.getName().startsWith("spring-commercial-")) { + String host = repository.getUrl().getHost(); + hostCredentials.put(host, + new MavenCredential("${env.COMMERCIAL_REPO_USERNAME}", "${env.COMMERCIAL_REPO_PASSWORD")); + } + }); + return transform(line, hostCredentials.entrySet(), (entry, + indent) -> "%s%n" + .formatted(indent, entry.getKey(), entry.getValue().username(), entry.getValue().password())); + } return line; } @@ -99,10 +116,14 @@ public class RepositoryTransformersExtension { } private String transform(String line, BiFunction generator) { + return transform(line, getSpringRepositories(), generator); + } + + private String transform(String line, Iterable iterable, BiFunction generator) { StringBuilder result = new StringBuilder(); String indent = getIndent(line); - getSpringRepositories().forEach((repository) -> { - String fragment = generator.apply(repository, indent); + iterable.forEach((item) -> { + String fragment = generator.apply(item, indent); if (fragment != null) { result.append(!result.isEmpty() ? "\n" : ""); result.append(fragment); @@ -136,4 +157,8 @@ public class RepositoryTransformersExtension { project.getExtensions().create("springRepositoryTransformers", RepositoryTransformersExtension.class, project); } + record MavenCredential(String username, String password) { + + } + } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/ivysettings.xml b/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/ivysettings.xml index f9d3011e630..470a19bc53b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/ivysettings.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/ivysettings.xml @@ -2,7 +2,6 @@ - @@ -11,6 +10,5 @@ - - + diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml index 51cf26e3633..91bec08ae53 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml @@ -3,7 +3,6 @@ - @@ -12,4 +11,5 @@ +