From c1f3bee77783a1f3349083e431dd4bb7cd7f290a Mon Sep 17 00:00:00 2001 From: Christian Schulte Date: Tue, 13 Dec 2016 03:30:32 +0100 Subject: [PATCH 1/2] [MNG-4347] import-scoped dependencies of direct dependencies are not resolved using profile modifications from settings.xml o Updated the 'DefaultModelResolver' to handle replacing repositories the same way the 'DefaultDependencyCollector' does. When the 'DefaultDependencyCollector' finds a repository in a child node with an id matching a repository already in use, it will only merge any mirror definitions but never change the repository already in use. The 'DefaultModelResolver' needs to follow the same logic. What has been provided must not change for consistency. --- .../repository/internal/DefaultModelResolver.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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; } From f8ab4e1e37479d353fd4a6d20442aa29c6ad8899 Mon Sep 17 00:00:00 2001 From: Clark Perkins Date: Fri, 16 Feb 2018 11:59:07 -0600 Subject: [PATCH 2/2] Made the same changes to ProjectModelResolver --- .../apache/maven/project/ProjectModelResolver.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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; }