diff --git a/rewrite-maven/src/main/java/org/openrewrite/maven/internal/MavenPomDownloader.java b/rewrite-maven/src/main/java/org/openrewrite/maven/internal/MavenPomDownloader.java index fa928415dec..b4145f96c8e 100644 --- a/rewrite-maven/src/main/java/org/openrewrite/maven/internal/MavenPomDownloader.java +++ b/rewrite-maven/src/main/java/org/openrewrite/maven/internal/MavenPomDownloader.java @@ -412,7 +412,7 @@ public MavenMetadata downloadMetadata(GroupArtifactVersion gav, @Nullable Resolv break; } String href = responseBody.substring(start, end).trim(); - if (href.endsWith("/")) { + if (!href.startsWith("../") && href.endsWith("/")) { //Only look for hrefs that have directories (the directory names are the versions) versions.add(hrefToVersion(href, uri)); } diff --git a/rewrite-maven/src/test/java/org/openrewrite/maven/internal/MavenPomDownloaderTest.java b/rewrite-maven/src/test/java/org/openrewrite/maven/internal/MavenPomDownloaderTest.java index 2ee8b6ffbc2..f7f3d678cea 100755 --- a/rewrite-maven/src/test/java/org/openrewrite/maven/internal/MavenPomDownloaderTest.java +++ b/rewrite-maven/src/test/java/org/openrewrite/maven/internal/MavenPomDownloaderTest.java @@ -22,7 +22,6 @@ import org.intellij.lang.annotations.Language; import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.*; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; @@ -616,6 +615,18 @@ void deriveMetaDataFromFileRepository(@TempDir Path repoPath) throws Exception { assertThat(metaData.getVersioning().getVersions()).hasSize(3).containsAll(List.of("1.0.0", "1.1.0", "2.0.0")); } + @Test + void deriveMetaDataFromHtmlBasedRepository() throws Exception { + MavenRepository repository = MavenRepository.builder() + .id("html-based") + .uri("https://central.sonatype.com/repository/maven-snapshots") + .knownToExist(true) + .deriveMetadataIfMissing(true) + .build(); + assertThrows(MavenDownloadingException.class, () -> + new MavenPomDownloader(emptyMap(), ctx).downloadMetadata(new GroupArtifact("does.definitely.not", "exist"), null, List.of(repository))); + } + @SuppressWarnings("ConstantConditions") @Test void mergeMetadata() throws Exception {