1   package com.atlassian.maven.plugins.amps.util;
2   
3   import com.atlassian.maven.plugins.amps.ProductArtifact;
4   
5   import org.apache.maven.artifact.repository.ArtifactRepository;
6   import org.apache.maven.artifact.factory.ArtifactFactory;
7   import org.apache.maven.artifact.resolver.ArtifactResolver;
8   import org.apache.maven.artifact.resolver.ArtifactResolutionException;
9   import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
10  import org.apache.maven.artifact.Artifact;
11  import org.apache.maven.plugin.MojoExecutionException;
12  
13  import java.util.List;
14  
15  public class ArtifactRetriever
16  {
17      private final ArtifactResolver artifactResolver;
18      private final ArtifactFactory artifactFactory;
19      private final ArtifactRepository localRepository;
20      private final List<ArtifactRepository> remoteRepositories;
21  
22      public ArtifactRetriever(ArtifactResolver artifactResolver, ArtifactFactory artifactFactory, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories)
23      {
24          this.artifactResolver = artifactResolver;
25          this.artifactFactory = artifactFactory;
26          this.localRepository = localRepository;
27          this.remoteRepositories = remoteRepositories;
28      }
29  
30      public String resolve(ProductArtifact dependency) throws MojoExecutionException
31      {
32          Artifact artifact = this.artifactFactory.createArtifact(dependency.getGroupId(),
33          dependency.getArtifactId(), dependency.getVersion(), "compile", "jar");
34          try
35          {
36              this.artifactResolver.resolve(artifact, remoteRepositories, localRepository);
37          }
38          catch (ArtifactResolutionException e)
39          {
40              throw new MojoExecutionException("Cannot resolve artifact", e);
41          }
42          catch (ArtifactNotFoundException e)
43          {
44              throw new MojoExecutionException("Cannot find artifact", e);
45          }
46          return artifact.getFile().getPath();
47      }
48  }