Author: rfscholte Date: Mon May 18 21:01:40 2015 New Revision: 1680097 URL: http://svn.apache.org/r1680097 Log: Add resolveTransitively methods to ArtifactResolver + corresponding implementations
Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java?rev=1680097&r1=1680096&r2=1680097&view=diff ============================================================================== --- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java (original) +++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/ArtifactResolver.java Mon May 18 21:01:40 2015 @@ -1,10 +1,5 @@ package org.apache.maven.shared.artifact.resolve; -import java.util.List; - -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.project.ProjectBuildingRequest; - /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -24,10 +19,29 @@ import org.apache.maven.project.ProjectB * under the License. */ +import java.util.List; + +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.project.ProjectBuildingRequest; +import org.apache.maven.shared.artifact.resolve.filter.TransformableFilter; + public interface ArtifactResolver { + public org.apache.maven.artifact.Artifact resolveArtifact( ProjectBuildingRequest buildingRequest, - org.apache.maven.artifact.Artifact mavenArtifact, List<ArtifactRepository> remoteRepositories ) + org.apache.maven.artifact.Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories ) + throws ArtifactResolverException; + + public void resolveTransitively( ProjectBuildingRequest buildingRequest, + org.apache.maven.artifact.Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories ) + throws ArtifactResolverException; + + public void resolveTransitively( ProjectBuildingRequest buildingRequest, + org.apache.maven.artifact.Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories, + TransformableFilter filter ) throws ArtifactResolverException; } Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java?rev=1680097&r1=1680096&r2=1680097&view=diff ============================================================================== --- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java (original) +++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/DefaultArtifactResolver.java Mon May 18 21:01:40 2015 @@ -7,6 +7,7 @@ import org.apache.maven.artifact.reposit import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.artifact.resolve.ArtifactResolver; import org.apache.maven.shared.artifact.resolve.ArtifactResolverException; +import org.apache.maven.shared.artifact.resolve.filter.TransformableFilter; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.annotations.Component; @@ -58,7 +59,43 @@ public class DefaultArtifactResolver throw new ArtifactResolverException( e.getMessage(), e ); } } + + public void resolveTransitively( ProjectBuildingRequest buildingRequest, Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories ) + throws ArtifactResolverException + { + try + { + String hint = isMaven31() ? "maven31" : "maven3"; + + ArtifactResolver effectiveArtifactResolver = container.lookup( ArtifactResolver.class, hint ); + effectiveArtifactResolver.resolveTransitively( buildingRequest, mavenArtifact, remoteRepositories ); + } + catch ( ComponentLookupException e ) + { + throw new ArtifactResolverException( e.getMessage(), e ); + } + } + + public void resolveTransitively( ProjectBuildingRequest buildingRequest, Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories, TransformableFilter filter ) + throws ArtifactResolverException + { + try + { + String hint = isMaven31() ? "maven31" : "maven3"; + + ArtifactResolver effectiveArtifactResolver = container.lookup( ArtifactResolver.class, hint ); + + effectiveArtifactResolver.resolveTransitively( buildingRequest, mavenArtifact, remoteRepositories, filter ); + } + catch ( ComponentLookupException e ) + { + throw new ArtifactResolverException( e.getMessage(), e ); + } + } + /** * @return true if the current Maven version is Maven 3.1. */ Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java?rev=1680097&r1=1680096&r2=1680097&view=diff ============================================================================== --- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java (original) +++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven30ArtifactResolver.java Mon May 18 21:01:40 2015 @@ -19,6 +19,8 @@ package org.apache.maven.shared.artifact * under the License. */ +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import org.apache.maven.RepositoryUtils; @@ -26,17 +28,22 @@ import org.apache.maven.artifact.reposit import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.artifact.resolve.ArtifactResolver; import org.apache.maven.shared.artifact.resolve.ArtifactResolverException; +import org.apache.maven.shared.artifact.resolve.filter.TransformableFilter; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.RepositorySystemSession; import org.sonatype.aether.artifact.Artifact; +import org.sonatype.aether.collection.CollectRequest; +import org.sonatype.aether.collection.DependencyCollectionException; +import org.sonatype.aether.graph.DependencyFilter; import org.sonatype.aether.repository.RemoteRepository; import org.sonatype.aether.resolution.ArtifactDescriptorException; import org.sonatype.aether.resolution.ArtifactDescriptorRequest; import org.sonatype.aether.resolution.ArtifactDescriptorResult; import org.sonatype.aether.resolution.ArtifactRequest; import org.sonatype.aether.resolution.ArtifactResolutionException; +import org.sonatype.aether.resolution.ArtifactResult; @Component( role = ArtifactResolver.class, hint = "maven3" ) public class Maven30ArtifactResolver @@ -46,8 +53,8 @@ public class Maven30ArtifactResolver private RepositorySystem repositorySystem; public org.apache.maven.artifact.Artifact resolveArtifact( ProjectBuildingRequest buildingRequest, - org.apache.maven.artifact.Artifact mavenArtifact, - List<ArtifactRepository> remoteRepositories ) + org.apache.maven.artifact.Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories ) throws ArtifactResolverException { Artifact aetherArtifact = @@ -56,23 +63,24 @@ public class Maven30ArtifactResolver @SuppressWarnings( "unchecked" ) List<RemoteRepository> aetherRepositories = - (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", - List.class, remoteRepositories ); - + (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, remoteRepositories ); + RepositorySystemSession session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); try { // use descriptor to respect relocation - ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest( aetherArtifact, aetherRepositories, null ); - - ArtifactDescriptorResult descriptorResult = repositorySystem.readArtifactDescriptor( session, descriptorRequest ); - + ArtifactDescriptorRequest descriptorRequest = + new ArtifactDescriptorRequest( aetherArtifact, aetherRepositories, null ); + + ArtifactDescriptorResult descriptorResult = + repositorySystem.readArtifactDescriptor( session, descriptorRequest ); + ArtifactRequest request = new ArtifactRequest( descriptorResult.getArtifact(), aetherRepositories, null ); - + Artifact resolvedArtifact = repositorySystem.resolveArtifact( session, request ).getArtifact(); - + return (org.apache.maven.artifact.Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, resolvedArtifact ); } @@ -86,4 +94,74 @@ public class Maven30ArtifactResolver } } + public void resolveTransitively( ProjectBuildingRequest buildingRequest, + org.apache.maven.artifact.Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories ) + throws ArtifactResolverException + { + resolveTransitively( buildingRequest, mavenArtifact, remoteRepositories, null ); + } + + public void resolveTransitively( ProjectBuildingRequest buildingRequest, + org.apache.maven.artifact.Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories, + TransformableFilter dependencyFilter ) + throws ArtifactResolverException + { + Artifact aetherArtifact = + (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class, + mavenArtifact ); + + @SuppressWarnings( "unchecked" ) + List<RemoteRepository> aetherRepositories = + (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, remoteRepositories ); + + RepositorySystemSession session = + (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + try + { + // use descriptor to respect relocation + ArtifactDescriptorRequest descriptorRequest = + new ArtifactDescriptorRequest( aetherArtifact, aetherRepositories, null ); + + ArtifactDescriptorResult descriptorResult = + repositorySystem.readArtifactDescriptor( session, descriptorRequest ); + + CollectRequest request = + new CollectRequest( descriptorResult.getDependencies(), descriptorResult.getManagedDependencies(), + aetherRepositories ); + + DependencyFilter depFilter = null; + if( dependencyFilter != null ) + { + depFilter = dependencyFilter.transform( new SonatypeAetherFilterTransformer() ); + } + + List<ArtifactResult> artifactResults = repositorySystem.resolveDependencies( session, request, depFilter ); + + Collection<ArtifactRequest> artifactRequests = new ArrayList<ArtifactRequest>( 1 + artifactResults.size() ); + + artifactRequests.add( new ArtifactRequest( descriptorResult.getArtifact(), aetherRepositories, null ) ); + + for ( ArtifactResult artifactResult : artifactResults ) + { + artifactRequests.add( new ArtifactRequest( artifactResult.getArtifact(), aetherRepositories, null ) ); + } + + repositorySystem.resolveArtifacts( session, artifactRequests ); + } + catch ( ArtifactDescriptorException e ) + { + throw new ArtifactResolverException( e.getMessage(), e ); + } + catch ( ArtifactResolutionException e ) + { + throw new ArtifactResolverException( e.getMessage(), e ); + } + catch ( DependencyCollectionException e ) + { + throw new ArtifactResolverException( e.getMessage(), e ); + } + } } Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java?rev=1680097&r1=1680096&r2=1680097&view=diff ============================================================================== --- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java (original) +++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Maven31ArtifactResolver.java Mon May 18 21:01:40 2015 @@ -19,6 +19,8 @@ package org.apache.maven.shared.artifact * under the License. */ +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import org.apache.maven.RepositoryUtils; @@ -26,17 +28,23 @@ import org.apache.maven.artifact.reposit import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.artifact.resolve.ArtifactResolver; import org.apache.maven.shared.artifact.resolve.ArtifactResolverException; +import org.apache.maven.shared.artifact.resolve.filter.TransformableFilter; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.collection.CollectRequest; +import org.eclipse.aether.graph.DependencyFilter; import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.resolution.ArtifactDescriptorException; import org.eclipse.aether.resolution.ArtifactDescriptorRequest; import org.eclipse.aether.resolution.ArtifactDescriptorResult; import org.eclipse.aether.resolution.ArtifactRequest; import org.eclipse.aether.resolution.ArtifactResolutionException; +import org.eclipse.aether.resolution.ArtifactResult; +import org.eclipse.aether.resolution.DependencyRequest; +import org.eclipse.aether.resolution.DependencyResolutionException; @Component( role = ArtifactResolver.class, hint = "maven31" ) public class Maven31ArtifactResolver @@ -46,8 +54,8 @@ public class Maven31ArtifactResolver private RepositorySystem repositorySystem; public org.apache.maven.artifact.Artifact resolveArtifact( ProjectBuildingRequest buildingRequest, - org.apache.maven.artifact.Artifact mavenArtifact, - List<ArtifactRepository> remoteRepositories ) + org.apache.maven.artifact.Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories ) throws ArtifactResolverException { Artifact aetherArtifact = @@ -56,8 +64,7 @@ public class Maven31ArtifactResolver @SuppressWarnings( "unchecked" ) List<RemoteRepository> aetherRepositories = - (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", - List.class, remoteRepositories ); + (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, remoteRepositories ); RepositorySystemSession session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); @@ -65,14 +72,16 @@ public class Maven31ArtifactResolver try { // use descriptor to respect relocation - ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest( aetherArtifact, aetherRepositories, null ); - - ArtifactDescriptorResult descriptorResult = repositorySystem.readArtifactDescriptor( session, descriptorRequest ); + ArtifactDescriptorRequest descriptorRequest = + new ArtifactDescriptorRequest( aetherArtifact, aetherRepositories, null ); + + ArtifactDescriptorResult descriptorResult = + repositorySystem.readArtifactDescriptor( session, descriptorRequest ); ArtifactRequest request = new ArtifactRequest( descriptorResult.getArtifact(), aetherRepositories, null ); - + Artifact resolvedArtifact = repositorySystem.resolveArtifact( session, request ).getArtifact(); - + return (org.apache.maven.artifact.Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, resolvedArtifact ); } @@ -86,4 +95,76 @@ public class Maven31ArtifactResolver } } + public void resolveTransitively( ProjectBuildingRequest buildingRequest, + org.apache.maven.artifact.Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories ) + throws ArtifactResolverException + { + resolveTransitively( buildingRequest, mavenArtifact, remoteRepositories, null ); + } + + public void resolveTransitively( ProjectBuildingRequest buildingRequest, + org.apache.maven.artifact.Artifact mavenArtifact, + List<ArtifactRepository> remoteRepositories, TransformableFilter dependencyFilter ) + throws ArtifactResolverException + { + Artifact aetherArtifact = + (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class, + mavenArtifact ); + + @SuppressWarnings( "unchecked" ) + List<RemoteRepository> aetherRepositories = + (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class, remoteRepositories ); + + RepositorySystemSession session = + (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" ); + + try + { + // use descriptor to respect relocation + ArtifactDescriptorRequest descriptorRequest = + new ArtifactDescriptorRequest( aetherArtifact, aetherRepositories, null ); + + ArtifactDescriptorResult descriptorResult = + repositorySystem.readArtifactDescriptor( session, descriptorRequest ); + + CollectRequest request = + new CollectRequest( descriptorResult.getDependencies(), descriptorResult.getManagedDependencies(), + aetherRepositories ); + + DependencyFilter depFilter = null; + if ( dependencyFilter != null ) + { + depFilter = dependencyFilter.transform( new EclipseAetherFilterTransformer() ); + } + + DependencyRequest depRequest = new DependencyRequest( request, depFilter ); + + List<ArtifactResult> artifactResults = + repositorySystem.resolveDependencies( session, depRequest ).getArtifactResults(); + + Collection<ArtifactRequest> artifactRequests = new ArrayList<ArtifactRequest>( 1 + artifactResults.size() ); + + artifactRequests.add( new ArtifactRequest( descriptorResult.getArtifact(), aetherRepositories, null ) ); + + for ( ArtifactResult artifactResult : artifactResults ) + { + artifactRequests.add( new ArtifactRequest( artifactResult.getArtifact(), aetherRepositories, null ) ); + } + + repositorySystem.resolveArtifacts( session, artifactRequests ); + } + catch ( ArtifactDescriptorException e ) + { + throw new ArtifactResolverException( e.getMessage(), e ); + } + catch ( ArtifactResolutionException e ) + { + throw new ArtifactResolverException( e.getMessage(), e ); + } + catch ( DependencyResolutionException e ) + { + throw new ArtifactResolverException( e.getMessage(), e ); + } + } }