Repository: maven Updated Branches: refs/heads/master 18964baa2 -> 016932edb
MNG-5639: Support resolution of Import Scope POMs from Repo that contains a ${parameter} Fix up previous Signed-off-by: Jason van Zyl <ja...@tesla.io> Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/016932ed Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/016932ed Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/016932ed Branch: refs/heads/master Commit: 016932edbc6dfae2d0a8714a186a4e3a44174a78 Parents: 18964ba Author: Mark Ingram <mark.ing...@trafigura.com> Authored: Tue May 27 15:44:06 2014 +0100 Committer: Jason van Zyl <ja...@tesla.io> Committed: Tue Jun 10 08:55:24 2014 -0400 ---------------------------------------------------------------------- .../internal/DefaultModelResolver.java | 19 ++++++++++++ .../maven/project/ProjectModelResolver.java | 16 ++++++++-- .../project/DefaultMavenProjectBuilderTest.java | 9 ++++++ ...-resolves-from-property-based-repository.xml | 31 ++++++++++++++++++++ .../model/building/DefaultModelBuilder.java | 13 ++++++++ .../maven/model/resolution/ModelResolver.java | 6 ++++ 6 files changed, 92 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java ---------------------------------------------------------------------- diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java index 08ad432..98eacb6 100644 --- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java +++ b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java @@ -20,6 +20,7 @@ package org.apache.maven.repository.internal; */ import java.io.File; +import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -60,6 +61,8 @@ class DefaultModelResolver private List<RemoteRepository> repositories; + private final List<RemoteRepository> externalRepositories; + private final ArtifactResolver resolver; private final RemoteRepositoryManager remoteRepositoryManager; @@ -76,6 +79,10 @@ class DefaultModelResolver this.resolver = resolver; this.remoteRepositoryManager = remoteRepositoryManager; this.repositories = repositories; + List<RemoteRepository> externalRepositories = new ArrayList<RemoteRepository>(); + externalRepositories.addAll(repositories); + this.externalRepositories = Collections.unmodifiableList(externalRepositories); + this.repositoryIds = new HashSet<String>(); } @@ -87,9 +94,11 @@ class DefaultModelResolver this.resolver = original.resolver; this.remoteRepositoryManager = original.remoteRepositoryManager; this.repositories = original.repositories; + this.externalRepositories = original.externalRepositories; this.repositoryIds = new HashSet<String>( original.repositoryIds ); } + @Override public void addRepository( Repository repository ) throws InvalidRepositoryException { @@ -105,11 +114,21 @@ class DefaultModelResolver remoteRepositoryManager.aggregateRepositories( session, repositories, newRepositories, true ); } + @Override + public void resetRepositories() + { + this.repositoryIds.clear(); + this.repositories.clear(); + this.repositories.addAll(externalRepositories); + } + + @Override public ModelResolver newCopy() { return new DefaultModelResolver( this ); } + @Override public ModelSource resolveModel( String groupId, String artifactId, String version ) throws UnresolvableModelException { http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java ---------------------------------------------------------------------- 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 522c79c..15cbdbb 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 @@ -84,8 +84,11 @@ class ProjectModelResolver this.resolver = resolver; this.remoteRepositoryManager = remoteRepositoryManager; this.pomRepositories = new ArrayList<RemoteRepository>(); - this.externalRepositories = repositories; - this.repositories = repositories; + List<RemoteRepository> externalRepositories = new ArrayList<RemoteRepository>(); + externalRepositories.addAll(repositories); + this.externalRepositories = Collections.unmodifiableList(externalRepositories); + this.repositories = new ArrayList<RemoteRepository>(); + this.repositories.addAll(externalRepositories); this.repositoryMerging = repositoryMerging; this.repositoryIds = new HashSet<String>(); this.modelPool = modelPool; @@ -129,6 +132,15 @@ class ProjectModelResolver } } + @Override + public void resetRepositories() + { + this.repositoryIds.clear(); + this.pomRepositories.clear(); + this.repositories.clear(); + this.repositories.addAll(externalRepositories); + } + public ModelResolver newCopy() { return new ProjectModelResolver( this ); http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java ---------------------------------------------------------------------- diff --git a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java index 7f1cef7..d7c2470 100644 --- a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java @@ -181,4 +181,13 @@ public class DefaultMavenProjectBuilderTest } } + public void testImportScopePomResolvesFromPropertyBasedRepository() + throws Exception + { + File pomFile = getTestFile( "src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml" ); + ProjectBuildingRequest request = newBuildingRequest(); + request.setProcessPlugins( false ); + request.setResolveDependencies( true ); + projectBuilder.build( pomFile, request ); + } } http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml b/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml new file mode 100644 index 0000000..4c29a3b --- /dev/null +++ b/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml @@ -0,0 +1,31 @@ +<project> + <modelVersion>4.0.0</modelVersion> + + <groupId>test</groupId> + <artifactId>imported-pom-found</artifactId> + <version>0.0.1-SNAPSHOT</version> + + <properties> + <repo.url>file:src/test/remote-repo</repo.url> + </properties> + + <repositories> + <repository> + <id>central</id> + <url>${repo.url}</url> + </repository> + </repositories> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.apache.maven.its</groupId> + <artifactId>a</artifactId> + <version>0.1</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + +</project> http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java ---------------------------------------------------------------------- diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java index c301856..414646b 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java @@ -343,6 +343,9 @@ public class DefaultModelBuilder modelUrlNormalizer.normalize( resultModel, request ); + //Now the fully interpolated model is available reconfigure the resolver + configureResolver( request.getModelResolver(), resultModel, problems , true ); + resultData.setGroupId( resultModel.getGroupId() ); resultData.setArtifactId( resultModel.getArtifactId() ); resultData.setVersion( resultModel.getVersion() ); @@ -551,6 +554,11 @@ public class DefaultModelBuilder private void configureResolver( ModelResolver modelResolver, Model model, DefaultModelProblemCollector problems ) { + configureResolver( modelResolver, model, problems, false ); + } + + private void configureResolver( ModelResolver modelResolver, Model model, DefaultModelProblemCollector problems, boolean resetRepositories ) + { if ( modelResolver == null ) { return; @@ -560,6 +568,11 @@ public class DefaultModelBuilder List<Repository> repositories = model.getRepositories(); + if (resetRepositories) + { + modelResolver.resetRepositories(); + } + for ( Repository repository : repositories ) { try http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java ---------------------------------------------------------------------- diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java b/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java index 506b527..742fe3c 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java @@ -56,6 +56,12 @@ public interface ModelResolver throws InvalidRepositoryException; /** + * Resets repositories, has the effect of clearing any repositories previously added by the + * {link #addRepository(Repository) method + */ + void resetRepositories(); + + /** * Clones this resolver for usage in a forked resolution process. In general, implementors need not provide a deep * clone. The only requirement is that invocations of {@link #addRepository(Repository)} on the clone do not affect * the state of the original resolver and vice versa.