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) { 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("-")) { if (this.version.contains("-")) {
addOssRepository("milestone", "/milestone", action) addOssRepository("milestone", false, "/milestone", action)
} }
if (this.version.endsWith("-SNAPSHOT")) { if (this.version.endsWith("-SNAPSHOT")) {
addCommercialRepository("snapshot", "/spring-enterprise-maven-dev-local", action) addCommercialRepository("snapshot", true, "/spring-enterprise-maven-dev-local", action)
addOssRepository("snapshot", "/snapshot", 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 name = "spring-oss-" + id
def url = "https://repo.spring.io" + path 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 if (!"commercial".equalsIgnoreCase(this.buildType)) return
def name = "spring-commercial-" + id def name = "spring-commercial-" + id
def url = fromEnv("COMMERCIAL_%SREPO_URL", id, "https://usw1.packages.broadcom.com" + path) def url = fromEnv("COMMERCIAL_%SREPO_URL", id, "https://usw1.packages.broadcom.com" + path)
def username = fromEnv("COMMERCIAL_%SREPO_USERNAME", id) def username = fromEnv("COMMERCIAL_%SREPO_USERNAME", id)
def password = fromEnv("COMMERCIAL_%SREPO_PASSWORD", id) def password = fromEnv("COMMERCIAL_%SREPO_PASSWORD", id)
addRepository(name, url, { maven -> addRepository(name, snapshot, url, { maven ->
maven.credentials { credentials -> maven.credentials { credentials ->
credentials.setUsername(username) credentials.setUsername(username)
credentials.setPassword(password) 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 -> this.repositories.maven { maven ->
maven.setName(name) maven.setName(name)
maven.setUrl(url) maven.setUrl(url)
maven.content { content ->
if (snapshot) {
content.snapshotsOnly()
} else {
content.releasesOnly()
}
}
action(maven) action(maven)
} }
} }

View File

@ -17,7 +17,12 @@
package org.springframework.boot.build; package org.springframework.boot.build;
import java.net.URI; 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.BiFunction;
import java.util.function.Function;
import javax.inject.Inject; import javax.inject.Inject;
@ -96,19 +101,34 @@ public class RepositoryTransformersExtension {
private String transform(String line, BiFunction<MavenArtifactRepository, String, String> generator) { private String transform(String line, BiFunction<MavenArtifactRepository, String, String> generator) {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
String indent = getIndent(line); String indent = getIndent(line);
this.project.getRepositories().withType(MavenArtifactRepository.class, (repository) -> { getSpringRepositories().forEach((repository) -> {
String name = repository.getName(); String fragment = generator.apply(repository, indent);
if (name.startsWith("spring-")) { if (fragment != null) {
String fragment = generator.apply(repository, indent); result.append(!result.isEmpty() ? "\n" : "");
if (fragment != null) { result.append(fragment);
result.append(!result.isEmpty() ? "\n" : "");
result.append(fragment);
}
} }
}); });
return result.toString(); 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) { private String getIndent(String line) {
return line.substring(0, line.length() - line.stripLeading().length()); return line.substring(0, line.length() - line.stripLeading().length());
} }