1   package org.apache.maven.plugins.dependency.resolvers;
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  import java.io.IOException;
23  import java.util.LinkedHashSet;
24  import java.util.List;
25  import java.util.Set;
26  
27  import org.apache.maven.artifact.Artifact;
28  import org.apache.maven.artifact.repository.ArtifactRepository;
29  import org.apache.maven.plugin.MojoExecutionException;
30  import org.apache.maven.plugins.annotations.LifecyclePhase;
31  import org.apache.maven.plugins.annotations.Mojo;
32  import org.apache.maven.plugins.annotations.Parameter;
33  import org.apache.maven.plugins.dependency.utils.DependencyUtil;
34  import org.apache.maven.project.DefaultProjectBuildingRequest;
35  import org.apache.maven.project.ProjectBuildingRequest;
36  import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
37  import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
38  import org.apache.maven.shared.artifact.filter.collection.FilterArtifacts;
39  import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
40  import org.apache.maven.shared.transfer.dependencies.DefaultDependableCoordinate;
41  import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
42  
43  
44  
45  
46  
47  
48  
49  @Mojo( name = "resolve-plugins", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true )
50  public class ResolvePluginsMojo
51      extends AbstractResolveMojo
52  {
53  
54      
55  
56  
57      @Parameter( defaultValue = "${project.pluginArtifactRepositories}", readonly = true, required = true )
58      private List<ArtifactRepository> remotePluginRepositories;
59  
60      
61  
62  
63  
64  
65      @Override
66      protected void doExecute()
67          throws MojoExecutionException
68      {
69          try
70          {
71              
72              final Set<Artifact> plugins = resolvePluginArtifacts();
73  
74              StringBuilder sb = new StringBuilder();
75              sb.append( System.lineSeparator() );
76              sb.append( "The following plugins have been resolved:" );
77              sb.append( System.lineSeparator() );
78              if ( plugins == null || plugins.isEmpty() )
79              {
80                  sb.append( "   none" );
81                  sb.append( System.lineSeparator() );
82              }
83              else
84              {
85                  for ( Artifact plugin : plugins )
86                  {
87                      String artifactFilename = null;
88                      if ( outputAbsoluteArtifactFilename )
89                      {
90                          try
91                          {
92                              
93                              artifactFilename = plugin.getFile().getAbsoluteFile().getPath();
94                          }
95                          catch ( NullPointerException e )
96                          {
97                              
98                              artifactFilename = null;
99                          }
100                     }
101 
102                     String id = plugin.toString();
103                     sb.append( "   " )
104                             .append( id )
105                             .append( outputAbsoluteArtifactFilename ? ":" + artifactFilename : "" )
106                             .append( System.lineSeparator() );
107 
108                     if ( !excludeTransitive )
109                     {
110                         DefaultDependableCoordinate pluginCoordinate = new DefaultDependableCoordinate();
111                         pluginCoordinate.setGroupId( plugin.getGroupId() );
112                         pluginCoordinate.setArtifactId( plugin.getArtifactId() );
113                         pluginCoordinate.setVersion( plugin.getVersion() );
114 
115                         for ( final Artifact artifact : resolveArtifactDependencies( pluginCoordinate ) )
116                         {
117                             artifactFilename = null;
118                             if ( outputAbsoluteArtifactFilename )
119                             {
120                                 try
121                                 {
122                                     
123                                     artifactFilename = artifact.getFile().getAbsoluteFile().getPath();
124                                 }
125                                 catch ( NullPointerException e )
126                                 {
127                                     
128                                     artifactFilename = null;
129                                 }
130                             }
131 
132                             id = artifact.toString();
133                             sb.append( "      " )
134                                     .append( id )
135                                     .append( outputAbsoluteArtifactFilename ? ":" + artifactFilename : "" )
136                                     .append( System.lineSeparator() );
137                         }
138                     }
139                 }
140                 sb.append( System.lineSeparator() );
141 
142                 String output = sb.toString();
143                 if ( outputFile == null )
144                 {
145                     DependencyUtil.log( output, getLog() );
146                 }
147                 else
148                 {
149                     DependencyUtil.write( output, outputFile, appendOutput, getLog() );
150                 }
151             }
152         }
153         catch ( IOException | ArtifactFilterException | ArtifactResolverException | DependencyResolverException e )
154         {
155             throw new MojoExecutionException( e.getMessage(), e );
156         }
157     }
158 
159     
160 
161 
162 
163 
164 
165 
166     protected Set<Artifact> resolvePluginArtifacts()
167         throws ArtifactFilterException, ArtifactResolverException
168     {
169         final Set<Artifact> plugins = getProject().getPluginArtifacts();
170         final Set<Artifact> reports = getProject().getReportArtifacts();
171 
172         Set<Artifact> artifacts = new LinkedHashSet<>();
173         artifacts.addAll( reports );
174         artifacts.addAll( plugins );
175 
176         final FilterArtifacts filter = getArtifactsFilter();
177         artifacts = filter.filter( artifacts );
178 
179         Set<Artifact> resolvedArtifacts = new LinkedHashSet<>( artifacts.size() );
180         
181         for ( final Artifact artifact : new LinkedHashSet<>( artifacts ) )
182         {
183             
184             
185             
186             
187             
188             
189             
190             
191             
192             
193             
194             
195             
196 
197             ProjectBuildingRequest buildingRequest =
198                 new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
199 
200             buildingRequest.setRemoteRepositories( this.remotePluginRepositories );
201 
202             
203             resolvedArtifacts.add( getArtifactResolver().resolveArtifact( buildingRequest, artifact ).getArtifact() );
204         }
205         return artifacts;
206     }
207 
208     @Override
209     protected ArtifactsFilter getMarkedArtifactFilter()
210     {
211         return null;
212     }
213 }