From 09400df47b88bb8f42670b56327957256330f3ca Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 9 Oct 2024 09:21:09 +0100 Subject: [PATCH] Make URL creation more robust in Bomr's version resolver Using URI#resolve is brittle as the behavior changes depending on whether or not the URI ends with a /. This can result in the original URI's path being lost and the URLs for the Maven metadata files being incorrect. See gh-42333 --- .../boot/build/bom/bomr/MavenMetadataVersionResolver.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MavenMetadataVersionResolver.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MavenMetadataVersionResolver.java index 2da3daee56..f7b5c58191 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MavenMetadataVersionResolver.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/bomr/MavenMetadataVersionResolver.java @@ -43,6 +43,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; /** * A {@link VersionResolver} that examines {@code maven-metadata.xml} to determine the @@ -76,7 +77,10 @@ final class MavenMetadataVersionResolver implements VersionResolver { private Set resolveVersions(String groupId, String artifactId, MavenArtifactRepository repository) { Set versions = new HashSet<>(); - URI url = repository.getUrl().resolve(groupId.replace('.', '/') + "/" + artifactId + "/maven-metadata.xml"); + URI url = UriComponentsBuilder.fromUri(repository.getUrl()) + .pathSegment(groupId.replace('.', '/'), artifactId, "maven-metadata.xml") + .build() + .toUri(); try { HttpHeaders headers = new HttpHeaders(); String username = repository.getCredentials().getUsername();