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 982594f4266..e24d5b71c25 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/RepositoryTransformersExtension.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/RepositoryTransformersExtension.java @@ -16,6 +16,9 @@ package org.springframework.boot.build; +import java.net.URI; +import java.util.function.BiFunction; + import javax.inject.Inject; import org.gradle.api.Project; @@ -29,9 +32,9 @@ import org.gradle.api.artifacts.repositories.MavenArtifactRepository; */ public class RepositoryTransformersExtension { - private static final String MARKER = "{spring.mavenRepositories}"; + private static final String REPOSITORIES_MARKER = "{spring.mavenRepositories}"; - private static final String MARKER_PLUGIN = "{spring.mavenPluginRepositories}"; + private static final String PLUGIN_REPOSITORIES_MARKER = "{spring.mavenPluginRepositories}"; private final Project project; @@ -45,18 +48,12 @@ public class RepositoryTransformersExtension { } private String transformAnt(String line) { - if (line.contains(MARKER)) { - StringBuilder result = new StringBuilder(); - String indent = getIndent(line); - this.project.getRepositories().withType(MavenArtifactRepository.class, (repository) -> { + if (line.contains(REPOSITORIES_MARKER)) { + return transform(line, (repository, indent) -> { String name = repository.getName(); - if (name.startsWith("spring-")) { - result.append(!result.isEmpty() ? "\n" : ""); - result.append("%s".formatted(indent, name, - repository.getUrl())); - } + URI url = repository.getUrl(); + return "%s".formatted(indent, name, url); }); - return result.toString(); } return line; } @@ -66,26 +63,17 @@ public class RepositoryTransformersExtension { } private String transformMavenSettings(String line) { - if (line.contains(MARKER)) { - return transformMarker(line, false); + if (line.contains(REPOSITORIES_MARKER)) { + return transformMavenRepositories(line, false); } - if (line.contains(MARKER_PLUGIN)) { - return transformMarker(line, true); + if (line.contains(PLUGIN_REPOSITORIES_MARKER)) { + return transformMavenRepositories(line, true); } return line; } - private String transformMarker(String line, boolean pluginRepository) { - StringBuilder result = new StringBuilder(); - String indent = getIndent(line); - this.project.getRepositories().withType(MavenArtifactRepository.class, (repository) -> { - String name = repository.getName(); - if (name.startsWith("spring-")) { - result.append(!result.isEmpty() ? "\n" : ""); - result.append(mavenRepositoryXml(indent, repository, pluginRepository)); - } - }); - return result.toString(); + private String transformMavenRepositories(String line, boolean pluginRepository) { + return transform(line, (repository, indent) -> mavenRepositoryXml(indent, repository, pluginRepository)); } private String mavenRepositoryXml(String indent, MavenArtifactRepository repository, boolean pluginRepository) { @@ -105,6 +93,22 @@ public class RepositoryTransformersExtension { return xml.toString(); } + private String transform(String line, BiFunction generator) { + StringBuilder result = new StringBuilder(); + String indent = getIndent(line); + this.project.getRepositories().withType(MavenArtifactRepository.class, (repository) -> { + String name = repository.getName(); + if (name.startsWith("spring-")) { + String fragment = generator.apply(repository, indent); + if (fragment != null) { + result.append(!result.isEmpty() ? "\n" : ""); + result.append(fragment); + } + } + }); + return result.toString(); + } + private String getIndent(String line) { return line.substring(0, line.length() - line.stripLeading().length()); } diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java index 5f4eb3eb415..0c880431528 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java @@ -59,6 +59,7 @@ import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.springframework.boot.build.DeployedPlugin; +import org.springframework.boot.build.RepositoryTransformersExtension; import org.springframework.boot.build.bom.Library.Exclusion; import org.springframework.boot.build.bom.Library.Group; import org.springframework.boot.build.bom.Library.LibraryVersion; @@ -132,6 +133,8 @@ public class BomExtension { public void effectiveBomArtifact() { Configuration effectiveBomConfiguration = this.project.getConfigurations().create("effectiveBom"); + RepositoryTransformersExtension repositoryTransformers = this.project.getExtensions() + .getByType(RepositoryTransformersExtension.class); this.project.getTasks() .matching((task) -> task.getName().equals(DeployedPlugin.GENERATE_POM_TASK_NAME)) .all((task) -> { @@ -144,8 +147,10 @@ public class BomExtension { sync.dependsOn(task); sync.setDestinationDir(generatedBomDir); sync.from(((GenerateMavenPom) task).getDestination(), (pom) -> pom.rename((name) -> "pom.xml")); - sync.from(this.project.getResources().getText().fromString(loadSettingsXml()), - (settingsXml) -> settingsXml.rename((name) -> "settings.xml")); + sync.from(this.project.getResources().getText().fromString(loadSettingsXml()), (settingsXml) -> { + settingsXml.rename((name) -> "settings.xml"); + settingsXml.filter(repositoryTransformers.mavenSettings()); + }); }); File effectiveBom = this.project.getLayout() .getBuildDirectory() diff --git a/buildSrc/src/main/resources/effective-bom-settings.xml b/buildSrc/src/main/resources/effective-bom-settings.xml index d67307453cf..e2bb652e248 100644 --- a/buildSrc/src/main/resources/effective-bom-settings.xml +++ b/buildSrc/src/main/resources/effective-bom-settings.xml @@ -7,17 +7,7 @@ true - - spring-snapshot - https://repo.spring.io/snapshot - - true - - - - spring-milestone - https://repo.spring.io/milestone - + 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 2d04a1ad21b..f9d3011e630 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 @@ -11,5 +11,6 @@ + + - \ No newline at end of file diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/settings.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/settings.xml index 527bb28dd21..f2dd5798838 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/settings.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/settings.xml @@ -1,6 +1,18 @@ @localRepositoryPath@ + + + spring-commercial-release + ${env.COMMERCIAL_REPO_USERNAME} + ${env.COMMERCIAL_REPO_PASSWORD} + + + spring-commercial-snapshot + ${env.COMMERCIAL_REPO_USERNAME} + ${env.COMMERCIAL_REPO_PASSWORD} + + it-repo