Limit artifact types resolved from repositories

Use `content.snapshotsOnly()` or `content.releasesOnly()` to limit
when maven repositories can be used.
This commit is contained in:
Phillip Webb 2025-02-03 20:24:33 -08:00
parent 80e8ab8779
commit 810fedacee
2 changed files with 44 additions and 17 deletions

View File

@ -100,29 +100,29 @@ class SpringRepositoriesExtension {
}
private void addRepositories(action) {
addCommercialRepository("release", "/spring-enterprise-maven-prod-local", action)
addCommercialRepository("release", false, "/spring-enterprise-maven-prod-local", action)
if (this.version.contains("-")) {
addOssRepository("milestone", "/milestone", action)
addOssRepository("milestone", false, "/milestone", action)
}
if (this.version.endsWith("-SNAPSHOT")) {
addCommercialRepository("snapshot", "/spring-enterprise-maven-dev-local", action)
addOssRepository("snapshot", "/snapshot", action)
addCommercialRepository("snapshot", true, "/spring-enterprise-maven-dev-local", action)
addOssRepository("snapshot", true, "/snapshot", action)
}
}
private void addOssRepository(id, path, action) {
private void addOssRepository(id, snapshot, path, action) {
def name = "spring-oss-" + id
def url = "https://repo.spring.io" + path
addRepository(name, url, action)
addRepository(name, snapshot, url, action)
}
private void addCommercialRepository(id, path, action) {
private void addCommercialRepository(id, snapshot, path, action) {
if (!"commercial".equalsIgnoreCase(this.buildType)) return
def name = "spring-commercial-" + id
def url = fromEnv("COMMERCIAL_%SREPO_URL", id, "https://usw1.packages.broadcom.com" + path)
def username = fromEnv("COMMERCIAL_%SREPO_USERNAME", id)
def password = fromEnv("COMMERCIAL_%SREPO_PASSWORD", id)
addRepository(name, url, { maven ->
addRepository(name, snapshot, url, { maven ->
maven.credentials { credentials ->
credentials.setUsername(username)
credentials.setPassword(password)
@ -131,10 +131,17 @@ class SpringRepositoriesExtension {
})
}
private void addRepository(name, url, action) {
private void addRepository(name, snapshot, url, action) {
this.repositories.maven { maven ->
maven.setName(name)
maven.setUrl(url)
maven.content { content ->
if (snapshot) {
content.snapshotsOnly()
} else {
content.releasesOnly()
}
}
action(maven)
}
}

View File

@ -17,7 +17,12 @@
package org.springframework.boot.build;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;
import javax.inject.Inject;
@ -96,19 +101,34 @@ public class RepositoryTransformersExtension {
private String transform(String line, BiFunction<MavenArtifactRepository, String, String> generator) {
StringBuilder result = new StringBuilder();
String indent = getIndent(line);
this.project.getRepositories().withType(MavenArtifactRepository.class, (repository) -> {
String name = repository.getName();
if (name.startsWith("spring-")) {
getSpringRepositories().forEach((repository) -> {
String fragment = generator.apply(repository, indent);
if (fragment != null) {
result.append(!result.isEmpty() ? "\n" : "");
result.append(fragment);
}
}
});
return result.toString();
}
private List<MavenArtifactRepository> getSpringRepositories() {
List<MavenArtifactRepository> springRepositories = new ArrayList<>(this.project.getRepositories()
.withType(MavenArtifactRepository.class)
.stream()
.filter(this::isSpringReposirory)
.toList());
Function<MavenArtifactRepository, Boolean> bySnapshots = (repository) -> repository.getName()
.contains("snapshot");
Function<MavenArtifactRepository, String> byName = null;
Collections.sort(springRepositories, Comparator.comparing(bySnapshots).thenComparing(byName));
System.err.println(">>>> " + springRepositories);
return springRepositories;
}
private boolean isSpringReposirory(MavenArtifactRepository repository) {
return (repository.getName().startsWith("spring-"));
}
private String getIndent(String line) {
return line.substring(0, line.length() - line.stripLeading().length());
}