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 }