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 60a49fcc2e96..cd38dc88b9f1 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 5f6146fc2c26..d361faad123a 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) repositoriesField.get(state); assertEquals(3, repositories.size()); assertEquals("first", repositories.get(0).getId());