You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2015/07/17 23:06:24 UTC
svn commit: r1691641 - in
/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact:
./ resolve/ resolve/internal/
Author: rfscholte
Date: Fri Jul 17 21:06:24 2015
New Revision: 1691641
URL: http://svn.apache.org/r1691641
Log:
ArtifactResolver now uses ArtifactCoordinate
Modified:
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/ArtifactCoordinate.java
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/Invoker.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/ArtifactCoordinate.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/ArtifactCoordinate.java?rev=1691641&r1=1691640&r2=1691641&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/ArtifactCoordinate.java (original)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/ArtifactCoordinate.java Fri Jul 17 21:06:24 2015
@@ -124,7 +124,7 @@ public class ArtifactCoordinate
public final String getType()
{
- return type;
+ return type != null ? type : "jar";
}
public final void setType( String type )
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=1691641&r1=1691640&r2=1691641&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 Fri Jul 17 21:06:24 2015
@@ -19,8 +19,11 @@ package org.apache.maven.shared.artifact
* under the License.
*/
+import java.util.Collection;
+
import org.apache.maven.artifact.Artifact;
import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
/**
@@ -29,14 +32,29 @@ import org.apache.maven.shared.artifact.
public interface ArtifactResolver
{
- ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest , Artifact mavenArtifact )
+ ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest , Artifact mavenArtifact )
throws ArtifactResolverException;
- Iterable<ArtifactResult> resolveTransitively( ProjectBuildingRequest buildingRequest , Artifact mavenArtifact )
- throws ArtifactResolverException;
+ ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest , ArtifactCoordinate coordinate )
+ throws ArtifactResolverException;
- Iterable<ArtifactResult> resolveTransitively( ProjectBuildingRequest buildingRequest , Artifact mavenArtifact ,
- TransformableFilter filter )
+ /**
+ * This will resolve the dependencies of the coordinate, not resolving the the artifact of the coordinate itself.
+ * If the coordinate needs to be resolved too, use
+ * {@link #resolveDependencies(ProjectBuildingRequest, Collection, TransformableFilter)} passing
+ * {@code Collections.singletonList(coordinate)}
+ *
+ * @param buildingRequest
+ * @param coordinate
+ * @param filter
+ * @return
+ * @throws ArtifactResolverException
+ */
+ Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ ArtifactCoordinate coordinate, TransformableFilter filter )
throws ArtifactResolverException;
+ Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ Collection<ArtifactCoordinate> dependencies, 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=1691641&r1=1691640&r2=1691641&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 Fri Jul 17 21:06:24 2015
@@ -19,8 +19,11 @@ package org.apache.maven.shared.artifact
* under the License.
*/
+import java.util.Collection;
+
import org.apache.maven.artifact.Artifact;
import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
import org.apache.maven.shared.artifact.resolve.ArtifactResolverException;
@@ -42,6 +45,7 @@ public class DefaultArtifactResolver
{
private PlexusContainer container;
+ @Override
public ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest , Artifact mavenArtifact )
throws ArtifactResolverException
{
@@ -59,7 +63,8 @@ public class DefaultArtifactResolver
}
}
- public Iterable<ArtifactResult> resolveTransitively( ProjectBuildingRequest buildingRequest , Artifact mavenArtifact )
+ @Override
+ public ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate )
throws ArtifactResolverException
{
try
@@ -68,7 +73,7 @@ public class DefaultArtifactResolver
ArtifactResolver effectiveArtifactResolver = container.lookup( ArtifactResolver.class, hint );
- return effectiveArtifactResolver.resolveTransitively( buildingRequest, mavenArtifact );
+ return effectiveArtifactResolver.resolveArtifact( buildingRequest, coordinate );
}
catch ( ComponentLookupException e )
{
@@ -76,8 +81,10 @@ public class DefaultArtifactResolver
}
}
- public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveTransitively( ProjectBuildingRequest buildingRequest , Artifact mavenArtifact ,
- TransformableFilter filter )
+ @Override
+ public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ Collection<ArtifactCoordinate> coordinates,
+ TransformableFilter filter )
throws ArtifactResolverException
{
try
@@ -86,7 +93,27 @@ public class DefaultArtifactResolver
ArtifactResolver effectiveArtifactResolver = container.lookup( ArtifactResolver.class, hint );
- return effectiveArtifactResolver.resolveTransitively( buildingRequest, mavenArtifact, filter );
+ return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinates, filter );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new ArtifactResolverException( e.getMessage(), e );
+ }
+ }
+
+ @Override
+ public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ ArtifactCoordinate coordinate,
+ TransformableFilter filter )
+ throws ArtifactResolverException
+ {
+ try
+ {
+ String hint = isMaven31() ? "maven31" : "maven3";
+
+ ArtifactResolver effectiveArtifactResolver = container.lookup( ArtifactResolver.class, hint );
+
+ return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinate, filter );
}
catch ( ComponentLookupException e )
{
@@ -127,5 +154,4 @@ public class DefaultArtifactResolver
{
container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
}
-
}
Modified: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Invoker.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Invoker.java?rev=1691641&r1=1691640&r2=1691641&view=diff
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Invoker.java (original)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/artifact/resolve/internal/Invoker.java Fri Jul 17 21:06:24 2015
@@ -102,4 +102,35 @@ final class Invoker
throw new ArtifactResolverException( e.getMessage(), e );
}
}
+
+ /**
+ * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements
+ *
+ * @param objectClazz the class of the static method
+ * @param staticMethod the static method to call
+ * @param argClasses the classes of the argument, used to select the right static method
+ * @param args the actual arguments to be passed
+ * @return the result of the method invocation
+ * @throws ArtifactResolverException if any checked exception occurs
+ */
+ public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
+ throws ArtifactResolverException
+ {
+ try
+ {
+ return objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new ArtifactResolverException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new ArtifactResolverException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new ArtifactResolverException( e.getMessage(), e );
+ }
+ }
}
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=1691641&r1=1691640&r2=1691641&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 Fri Jul 17 21:06:24 2015
@@ -25,7 +25,9 @@ import java.util.Iterator;
import java.util.List;
import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
import org.apache.maven.shared.artifact.filter.resolve.transform.SonatypeAetherFilterTransformer;
import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
@@ -35,8 +37,11 @@ import org.codehaus.plexus.component.ann
import org.sonatype.aether.RepositorySystem;
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.artifact.ArtifactType;
+import org.sonatype.aether.artifact.ArtifactTypeRegistry;
import org.sonatype.aether.collection.CollectRequest;
import org.sonatype.aether.collection.DependencyCollectionException;
+import org.sonatype.aether.graph.Dependency;
import org.sonatype.aether.graph.DependencyFilter;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.resolution.ArtifactDescriptorException;
@@ -45,6 +50,8 @@ import org.sonatype.aether.resolution.Ar
import org.sonatype.aether.resolution.ArtifactRequest;
import org.sonatype.aether.resolution.ArtifactResolutionException;
import org.sonatype.aether.resolution.ArtifactResult;
+import org.sonatype.aether.util.artifact.DefaultArtifact;
+import org.sonatype.aether.util.artifact.DefaultArtifactType;
/**
*
@@ -55,7 +62,11 @@ public class Maven30ArtifactResolver
{
@Requirement
private RepositorySystem repositorySystem;
+
+ @Requirement
+ private ArtifactHandlerManager artifactHandlerManager;
+ @Override
public org.apache.maven.shared.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest ,
org.apache.maven.artifact.Artifact mavenArtifact )
throws ArtifactResolverException
@@ -64,6 +75,27 @@ public class Maven30ArtifactResolver
(Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class,
mavenArtifact );
+ return resolveArtifact( buildingRequest, aetherArtifact );
+ }
+
+ @Override
+ public org.apache.maven.shared.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
+ ArtifactCoordinate coordinate )
+ throws ArtifactResolverException
+ {
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+
+ Dependency aetherDependency = toDependency( coordinate, typeRegistry );
+
+ return resolveArtifact( buildingRequest, aetherDependency.getArtifact() );
+ }
+
+ private org.apache.maven.shared.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
+ Artifact aetherArtifact )
+ throws ArtifactResolverException
+ {
@SuppressWarnings( "unchecked" )
List<RemoteRepository> aetherRepositories =
(List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
@@ -94,55 +126,77 @@ public class Maven30ArtifactResolver
throw new ArtifactResolverException( e.getMessage(), e );
}
}
-
- public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveTransitively( ProjectBuildingRequest buildingRequest ,
- org.apache.maven.artifact.Artifact mavenArtifact )
- throws ArtifactResolverException
- {
- return resolveTransitively( buildingRequest, mavenArtifact, null );
- }
-
- public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveTransitively( ProjectBuildingRequest buildingRequest ,
- org.apache.maven.artifact.Artifact mavenArtifact ,
+
+ @Override
+ public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest ,
+ ArtifactCoordinate coordinate ,
TransformableFilter dependencyFilter )
throws ArtifactResolverException
{
- Artifact aetherArtifact =
- (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class,
- mavenArtifact );
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+ Dependency aetherRoot = toDependency( coordinate, typeRegistry );
+
@SuppressWarnings( "unchecked" )
List<RemoteRepository> aetherRepositories =
(List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
buildingRequest.getRemoteRepositories() );
- RepositorySystemSession session =
- (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+ CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
- try
+ return resolveDependencies( buildingRequest, aetherRepositories, dependencyFilter, request );
+ }
+
+
+ @Override
+ public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ Collection<ArtifactCoordinate> coordinates,
+ TransformableFilter filter )
+ throws ArtifactResolverException
+ {
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+
+ List<Dependency> dependencies = new ArrayList<Dependency>( coordinates.size() );
+
+ for ( ArtifactCoordinate coordinate : coordinates )
{
- // use descriptor to respect relocation
- ArtifactDescriptorRequest descriptorRequest =
- new ArtifactDescriptorRequest( aetherArtifact, aetherRepositories, null );
+ dependencies.add( toDependency( coordinate, typeRegistry ) );
+ }
- ArtifactDescriptorResult descriptorResult =
- repositorySystem.readArtifactDescriptor( session, descriptorRequest );
+ @SuppressWarnings( "unchecked" )
+ List<RemoteRepository> aetherRepositories =
+ (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
+ buildingRequest.getRemoteRepositories() );
+
+ CollectRequest request = new CollectRequest( (Dependency) null, dependencies, aetherRepositories );
- CollectRequest request =
- new CollectRequest( descriptorResult.getDependencies(), descriptorResult.getManagedDependencies(),
- aetherRepositories );
+ return resolveDependencies( buildingRequest, aetherRepositories, filter, request );
+ }
+ private Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ List<RemoteRepository> aetherRepositories,
+ TransformableFilter dependencyFilter,
+ CollectRequest request )
+ throws ArtifactResolverException
+ {
+ try
+ {
DependencyFilter depFilter = null;
if ( dependencyFilter != null )
{
depFilter = dependencyFilter.transform( new SonatypeAetherFilterTransformer() );
}
- List<ArtifactResult> dependencyResults = repositorySystem.resolveDependencies( session, request, depFilter );
+ RepositorySystemSession session =
+ (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
- Collection<ArtifactRequest> artifactRequests = new ArrayList<ArtifactRequest>( 1 + dependencyResults.size() );
+ List<ArtifactResult> dependencyResults = repositorySystem.resolveDependencies( session, request, depFilter );
- artifactRequests.add( new ArtifactRequest( descriptorResult.getArtifact(), aetherRepositories, null ) );
+ Collection<ArtifactRequest> artifactRequests = new ArrayList<ArtifactRequest>( dependencyResults.size() );
for ( ArtifactResult artifactResult : dependencyResults )
{
@@ -169,10 +223,6 @@ public class Maven30ArtifactResolver
}
};
}
- catch ( ArtifactDescriptorException e )
- {
- throw new ArtifactResolverException( e.getMessage(), e );
- }
catch ( ArtifactResolutionException e )
{
throw new ArtifactResolverException( e.getMessage(), e );
@@ -182,4 +232,27 @@ public class Maven30ArtifactResolver
throw new ArtifactResolverException( e.getMessage(), e );
}
}
+
+ /**
+ * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
+ *
+ * @param coordinate
+ * @param stereotypes
+ * @return as Aether Dependency
+ *
+ */
+ private static Dependency toDependency( ArtifactCoordinate coordinate, ArtifactTypeRegistry stereotypes )
+ {
+ ArtifactType stereotype = stereotypes.get( coordinate.getType() );
+ if ( stereotype == null )
+ {
+ stereotype = new DefaultArtifactType( coordinate.getType() );
+ }
+
+ Artifact artifact =
+ new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(), null,
+ coordinate.getVersion(), null, stereotype );
+
+ return new Dependency( artifact, null );
+ }
}
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=1691641&r1=1691640&r2=1691641&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 Fri Jul 17 21:06:24 2015
@@ -25,7 +25,9 @@ import java.util.Iterator;
import java.util.List;
import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.ArtifactCoordinate;
import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
import org.apache.maven.shared.artifact.filter.resolve.transform.EclipseAetherFilterTransformer;
import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
@@ -35,7 +37,12 @@ import org.codehaus.plexus.component.ann
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.ArtifactType;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.artifact.DefaultArtifactType;
import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.ArtifactDescriptorException;
@@ -46,6 +53,7 @@ import org.eclipse.aether.resolution.Art
import org.eclipse.aether.resolution.ArtifactResult;
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResolutionException;
+import org.eclipse.aether.resolution.DependencyResult;
/**
*
@@ -56,7 +64,11 @@ public class Maven31ArtifactResolver
{
@Requirement
private RepositorySystem repositorySystem;
+
+ @Requirement
+ private ArtifactHandlerManager artifactHandlerManager;
+ @Override
public org.apache.maven.shared.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest ,
org.apache.maven.artifact.Artifact mavenArtifact )
throws ArtifactResolverException
@@ -65,6 +77,27 @@ public class Maven31ArtifactResolver
(Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class,
mavenArtifact );
+ return resolveArtifact( buildingRequest, aetherArtifact );
+ }
+
+ @Override
+ public org.apache.maven.shared.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
+ ArtifactCoordinate coordinate )
+ throws ArtifactResolverException
+ {
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+
+ Dependency aetherDependency = toDependency( coordinate, typeRegistry );
+
+ return resolveArtifact( buildingRequest, aetherDependency.getArtifact() );
+ }
+
+ private org.apache.maven.shared.artifact.resolve.ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest,
+ Artifact aetherArtifact )
+ throws ArtifactResolverException
+ {
@SuppressWarnings( "unchecked" )
List<RemoteRepository> aetherRepositories =
(List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
@@ -86,69 +119,90 @@ public class Maven31ArtifactResolver
return new Maven31ArtifactResult( repositorySystem.resolveArtifact( session, request ) );
}
- catch ( ArtifactResolutionException e )
+ catch ( ArtifactDescriptorException e )
{
throw new ArtifactResolverException( e.getMessage(), e );
}
- catch ( ArtifactDescriptorException e )
+ catch ( ArtifactResolutionException e )
{
throw new ArtifactResolverException( e.getMessage(), e );
}
}
- public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveTransitively( ProjectBuildingRequest buildingRequest ,
- org.apache.maven.artifact.Artifact mavenArtifact )
+ public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest ,
+ ArtifactCoordinate coordinate ,
+ TransformableFilter dependencyFilter )
throws ArtifactResolverException
{
- return resolveTransitively( buildingRequest, mavenArtifact, null );
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+
+ Dependency aetherRoot = toDependency( coordinate, typeRegistry );
+
+ @SuppressWarnings( "unchecked" )
+ List<RemoteRepository> aetherRepositories =
+ (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
+ buildingRequest.getRemoteRepositories() );
+
+ CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
+
+ return resolveDependencies( buildingRequest, aetherRepositories, dependencyFilter, request );
}
- public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveTransitively( ProjectBuildingRequest buildingRequest ,
- org.apache.maven.artifact.Artifact mavenArtifact ,
- TransformableFilter dependencyFilter )
+
+
+ @Override
+ public Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ Collection<ArtifactCoordinate> coordinates,
+ TransformableFilter filter )
throws ArtifactResolverException
{
- Artifact aetherArtifact =
- (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact", org.apache.maven.artifact.Artifact.class,
- mavenArtifact );
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+
+ List<Dependency> dependencies = new ArrayList<Dependency>( coordinates.size() );
+
+ for ( ArtifactCoordinate coordinate : coordinates )
+ {
+ dependencies.add( toDependency( coordinate, typeRegistry ) );
+ }
@SuppressWarnings( "unchecked" )
List<RemoteRepository> aetherRepositories =
(List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
buildingRequest.getRemoteRepositories() );
- RepositorySystemSession session =
- (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+ CollectRequest request = new CollectRequest( (Dependency) null, dependencies, aetherRepositories );
+ return resolveDependencies( buildingRequest, aetherRepositories, filter, request );
+ }
+
+ private Iterable<org.apache.maven.shared.artifact.resolve.ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ List<RemoteRepository> aetherRepositories,
+ TransformableFilter dependencyFilter,
+ CollectRequest request )
+ throws ArtifactResolverException
+ {
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;
+ DependencyFilter depFilter = null;
if ( dependencyFilter != null )
{
depFilter = dependencyFilter.transform( new EclipseAetherFilterTransformer() );
}
DependencyRequest depRequest = new DependencyRequest( request, depFilter );
+
+ RepositorySystemSession session =
+ (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
- List<ArtifactResult> dependencyResults =
- repositorySystem.resolveDependencies( session, depRequest ).getArtifactResults();
-
- Collection<ArtifactRequest> artifactRequests = new ArrayList<ArtifactRequest>( 1 + dependencyResults.size() );
+ DependencyResult dependencyResults = repositorySystem.resolveDependencies( session, depRequest );
- artifactRequests.add( new ArtifactRequest( descriptorResult.getArtifact(), aetherRepositories, null ) );
+ Collection<ArtifactRequest> artifactRequests = new ArrayList<ArtifactRequest>( dependencyResults.getArtifactResults().size() );
- for ( ArtifactResult artifactResult : dependencyResults )
+ for ( ArtifactResult artifactResult : dependencyResults.getArtifactResults() )
{
artifactRequests.add( new ArtifactRequest( artifactResult.getArtifact(), aetherRepositories, null ) );
}
@@ -173,10 +227,6 @@ public class Maven31ArtifactResolver
}
};
}
- catch ( ArtifactDescriptorException e )
- {
- throw new ArtifactResolverException( e.getMessage(), e );
- }
catch ( ArtifactResolutionException e )
{
throw new ArtifactResolverException( e.getMessage(), e );
@@ -186,4 +236,27 @@ public class Maven31ArtifactResolver
throw new ArtifactResolverException( e.getMessage(), e );
}
}
+
+ /**
+ * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
+ *
+ * @param coordinate
+ * @param stereotypes
+ * @return as Aether Dependency
+ *
+ */
+ private static Dependency toDependency( ArtifactCoordinate coordinate, ArtifactTypeRegistry stereotypes )
+ {
+ ArtifactType stereotype = stereotypes.get( coordinate.getType() );
+ if ( stereotype == null )
+ {
+ stereotype = new DefaultArtifactType( coordinate.getType() );
+ }
+
+ Artifact artifact =
+ new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(), null,
+ coordinate.getVersion(), null, stereotype );
+
+ return new Dependency( artifact, null );
+ }
}