diff --git a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java index 2b3108a47fb8..ed3501f32d62 100644 --- a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java +++ b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java @@ -71,6 +71,8 @@ public class ProjectModelResolver private final List externalRepositories; + private final Set externalRepositoryIds; + private final RepositorySystem resolver; private final RemoteRepositoryManager remoteRepositoryManager; @@ -98,6 +100,12 @@ public ProjectModelResolver( RepositorySystemSession session, RequestTrace trace this.repositories.addAll( externalRepositories ); this.repositoryMerging = repositoryMerging; this.repositoryIds = new HashSet<>(); + this.externalRepositoryIds = new HashSet<>(); + for ( final RemoteRepository repository : this.repositories ) + { + this.repositoryIds.add( repository.getId() ); + this.externalRepositoryIds.add( repository.getId() ); + } this.modelPool = modelPool; } @@ -112,6 +120,7 @@ private ProjectModelResolver( ProjectModelResolver original ) this.repositories = new ArrayList<>( original.repositories ); this.repositoryMerging = original.repositoryMerging; this.repositoryIds = new HashSet<>( original.repositoryIds ); + this.externalRepositoryIds = new HashSet<>( original.externalRepositoryIds ); this.modelPool = original.modelPool; } @@ -127,7 +136,7 @@ public void addRepository( final Repository repository, boolean replace ) { if ( !repositoryIds.add( repository.getId() ) ) { - if ( !replace ) + if ( !replace || this.externalRepositoryIds.contains( repository.getId() ) ) { return; } diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java index 681845346912..2411b4e61700 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java @@ -70,6 +70,8 @@ class DefaultModelResolver private final List externalRepositories; + private final Set externalRepositoryIds; + private final ArtifactResolver resolver; private final VersionRangeResolver versionRangeResolver; @@ -92,8 +94,13 @@ class DefaultModelResolver List externalRepositories = new ArrayList<>(); externalRepositories.addAll( repositories ); this.externalRepositories = Collections.unmodifiableList( externalRepositories ); - this.repositoryIds = new HashSet<>(); + this.externalRepositoryIds = new HashSet<>(); + for ( final RemoteRepository repository : this.repositories ) + { + this.repositoryIds.add( repository.getId() ); + this.externalRepositoryIds.add( repository.getId() ); + } } private DefaultModelResolver( DefaultModelResolver original ) @@ -107,6 +114,7 @@ private DefaultModelResolver( DefaultModelResolver original ) this.repositories = new ArrayList<>( original.repositories ); this.externalRepositories = original.externalRepositories; this.repositoryIds = new HashSet<>( original.repositoryIds ); + this.externalRepositoryIds = new HashSet<>( original.externalRepositoryIds ); } @Override @@ -127,7 +135,7 @@ public void addRepository( final Repository repository, boolean replace ) if ( !repositoryIds.add( repository.getId() ) ) { - if ( !replace ) + if ( !replace || this.externalRepositoryIds.contains( repository.getId() ) ) { return; }