This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch fix-12049-uninterpolated-repo-id in repository https://gitbox.apache.org/repos/asf/maven.git
commit a07aeef2a8fbefea22cfb336b03f5d22b36cded1 Author: Guillaume Nodet <[email protected]> AuthorDate: Wed May 13 16:29:39 2026 +0200 Filter transitive repositories with uninterpolated IDs (#12049) The existing filter in mergeRepositories already excluded transitive repositories with uninterpolated URLs but did not check repository IDs. When a transitive dependency POM contained an expression like ${eclipseP2RepoId} as a repository ID with a valid URL, it passed the filter and later caused MavenValidator to throw IllegalArgumentException. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --- .../main/java/org/apache/maven/impl/model/DefaultModelBuilder.java | 4 +++- .../java/org/apache/maven/impl/model/DefaultModelBuilderTest.java | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java index 60a49fcc2e..cd38dc88b9 100644 --- a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java +++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java @@ -552,7 +552,9 @@ public void mergeRepositories(Model model, boolean replace) { // filter out transitive invalid repositories // this should be safe because invalid repo coming from build POMs // have been rejected earlier during validation - .filter(repo -> repo.getUrl() != null && !repo.getUrl().contains("${")) + .filter(repo -> repo.getUrl() != null + && !repo.getUrl().contains("${") + && (repo.getId() == null || !repo.getId().contains("${"))) .map(session::createRemoteRepository) .toList(); if (replace) { diff --git a/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelBuilderTest.java b/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelBuilderTest.java index 5f6146fc2c..d361faad12 100644 --- a/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelBuilderTest.java +++ b/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelBuilderTest.java @@ -107,12 +107,16 @@ public void testMergeRepositories() throws Exception { Repository.newBuilder() .id("third") .url("${thirdParentRepo}") + .build(), + Repository.newBuilder() + .id("${uninterpolatedRepoId}") + .url("https://valid.url") .build())) .build(); state.mergeRepositories(model, false); - // after merge + // after merge: "second" filtered (uninterpolated URL), "${uninterpolatedRepoId}" filtered (uninterpolated ID) repositories = (List<RemoteRepository>) repositoriesField.get(state); assertEquals(3, repositories.size()); assertEquals("first", repositories.get(0).getId());
