View Javadoc

1   package org.apache.maven.archetype.downloader;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.artifact.Artifact;
23  import org.apache.maven.artifact.factory.ArtifactFactory;
24  import org.apache.maven.artifact.repository.ArtifactRepository;
25  import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
26  import org.apache.maven.artifact.resolver.ArtifactResolutionException;
27  import org.apache.maven.artifact.resolver.ArtifactResolver;
28  
29  import java.io.File;
30  import java.util.ArrayList;
31  import java.util.List;
32  
33  /**
34   * @author Jason van Zyl
35   * @plexus.component
36   */
37  public class DefaultDownloader
38      implements Downloader
39  {
40      /**
41       * @plexus.requirement
42       */
43      private ArtifactResolver artifactResolver;
44  
45      /**
46       * @plexus.requirement
47       */
48      private ArtifactFactory artifactFactory;
49  
50      public File download( String groupId, String artifactId, String version, ArtifactRepository archetypeRepository,
51                            ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
52          throws DownloadException, DownloadNotFoundException
53     {
54          Artifact artifact =
55              artifactFactory.createArtifact( groupId, artifactId, version, Artifact.SCOPE_RUNTIME, "jar" );
56          Artifact artifactPom =
57              artifactFactory.createArtifact( groupId, artifactId, version, Artifact.SCOPE_RUNTIME, "pom" );
58  
59          List<ArtifactRepository> repositories = new ArrayList<ArtifactRepository>( remoteRepositories );
60          if ( repositories.isEmpty() && archetypeRepository != null )
61          {
62              repositories.add( archetypeRepository );
63          }
64          else if ( repositories.isEmpty() && localRepository != null )
65          {
66              repositories.add( localRepository );
67          }
68  
69          ArtifactRepository localRepo = localRepository;
70          try
71          {
72              artifactResolver.resolve( artifact, repositories, localRepo );
73          }
74          catch ( ArtifactResolutionException e )
75          {
76              throw new DownloadException( "Error downloading " + artifact.getId() + ".", e );
77          }
78          catch ( ArtifactNotFoundException e )
79          {
80              throw new DownloadNotFoundException( "Requested " + artifact.getId() + " download does not exist.", e );
81          }
82          try
83          {
84              artifactResolver.resolve( artifactPom, repositories, localRepo );
85          }
86          catch ( ArtifactResolutionException e )
87          {
88              throw new DownloadException( "Error downloading POM for " + artifact.getId() + ".", e );
89          }
90          catch ( ArtifactNotFoundException e )
91          {
92              throw new DownloadNotFoundException( "Requested " + artifact.getId() + " download's POM does not exist.", e );
93          }
94  
95          return artifact.getFile();
96      }
97  
98      public File downloadOld( String groupId, String artifactId, String version, ArtifactRepository archetypeRepository,
99                               ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
100         throws DownloadException, DownloadNotFoundException
101     {
102         Artifact artifact =
103             artifactFactory.createArtifact( groupId, artifactId, version, Artifact.SCOPE_RUNTIME, "jar" );
104         try
105         {
106             artifactResolver.resolve( artifact, remoteRepositories, localRepository );
107         }
108         catch ( ArtifactResolutionException e )
109         {
110             throw new DownloadException( "Error downloading " + artifact.getId() + ".", e );
111         }
112         catch ( ArtifactNotFoundException e )
113         {
114             throw new DownloadNotFoundException( "Requested " + artifact.getId() + " download does not exist.", e );
115         }
116 
117         return artifact.getFile();
118     }
119 }