1 package org.apache.maven.plugin.dependency;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.artifact.Artifact;
23 import org.apache.maven.plugin.MojoExecutionException;
24 import org.apache.maven.plugin.dependency.utils.DependencyStatusSets;
25 import org.apache.maven.plugin.dependency.utils.DependencyUtil;
26 import org.apache.maven.plugin.dependency.utils.resolvers.ArtifactsResolver;
27 import org.apache.maven.plugin.dependency.utils.resolvers.DefaultArtifactsResolver;
28 import org.apache.maven.plugin.dependency.utils.translators.ArtifactTranslator;
29 import org.apache.maven.plugin.dependency.utils.translators.ClassifierTypeTranslator;
30 import org.apache.maven.plugins.annotations.Parameter;
31 import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
32 import org.apache.maven.shared.artifact.filter.collection.ArtifactIdFilter;
33 import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
34 import org.apache.maven.shared.artifact.filter.collection.ClassifierFilter;
35 import org.apache.maven.shared.artifact.filter.collection.FilterArtifacts;
36 import org.apache.maven.shared.artifact.filter.collection.GroupIdFilter;
37 import org.apache.maven.shared.artifact.filter.collection.ProjectTransitivityFilter;
38 import org.apache.maven.shared.artifact.filter.collection.ScopeFilter;
39 import org.apache.maven.shared.artifact.filter.collection.TypeFilter;
40 import org.codehaus.plexus.util.StringUtils;
41
42 import java.io.File;
43 import java.util.HashSet;
44 import java.util.Set;
45
46
47
48
49
50
51
52
53
54 public abstract class AbstractDependencyFilterMojo
55 extends AbstractDependencyMojo
56 {
57
58
59
60
61
62 @Parameter( property = "excludeTransitive", defaultValue = "false" )
63 protected boolean excludeTransitive;
64
65
66
67
68
69
70
71 @Parameter( property = "includeTypes", defaultValue = "" )
72 protected String includeTypes;
73
74
75
76
77
78
79
80 @Parameter( property = "excludeTypes", defaultValue = "" )
81 protected String excludeTypes;
82
83
84
85
86
87
88 @Parameter( property = "includeScope", defaultValue = "" )
89 protected String includeScope;
90
91
92
93
94
95
96 @Parameter( property = "excludeScope", defaultValue = "" )
97 protected String excludeScope;
98
99
100
101
102
103
104
105 @Parameter( property = "includeClassifiers", defaultValue = "" )
106 protected String includeClassifiers;
107
108
109
110
111
112
113
114 @Parameter( property = "excludeClassifiers", defaultValue = "" )
115 protected String excludeClassifiers;
116
117
118
119
120
121
122 @Parameter( property = "classifier", defaultValue = "" )
123 protected String classifier;
124
125
126
127
128
129
130
131 @Parameter( property = "type", defaultValue = "" )
132 protected String type;
133
134
135
136
137
138
139 @Parameter( property = "excludeArtifactIds", defaultValue = "" )
140 protected String excludeArtifactIds;
141
142
143
144
145
146
147 @Parameter( property = "includeArtifactIds", defaultValue = "" )
148 protected String includeArtifactIds;
149
150
151
152
153
154
155 @Parameter( property = "excludeGroupIds", defaultValue = "" )
156 protected String excludeGroupIds;
157
158
159
160
161
162
163 @Parameter( property = "includeGroupIds", defaultValue = "" )
164 protected String includeGroupIds;
165
166
167
168
169
170
171 @Parameter( property = "markersDirectory",
172 defaultValue = "${project.build.directory}/dependency-maven-plugin-markers" )
173 protected File markersDirectory;
174
175
176
177
178
179
180 @Parameter( property = "overWriteReleases", defaultValue = "false" )
181 protected boolean overWriteReleases;
182
183
184
185
186
187
188 @Parameter( property = "overWriteSnapshots", defaultValue = "false" )
189 protected boolean overWriteSnapshots;
190
191
192
193
194
195
196 @Parameter( property = "overWriteIfNewer", defaultValue = "true" )
197 protected boolean overWriteIfNewer;
198
199
200
201
202
203
204 @Parameter( property = "mdep.prependGroupId", defaultValue = "false" )
205 protected boolean prependGroupId = false;
206
207
208
209
210
211
212 protected abstract ArtifactsFilter getMarkedArtifactFilter();
213
214
215
216
217
218
219
220 protected Set<Artifact> getResolvedDependencies( boolean stopOnFailure )
221 throws MojoExecutionException
222
223 {
224 DependencyStatusSets status = getDependencySets( stopOnFailure );
225
226 return status.getResolvedDependencies();
227 }
228
229
230
231
232
233
234
235
236
237
238
239 protected DependencyStatusSets getDependencySets( boolean stopOnFailure )
240 throws MojoExecutionException
241 {
242
243 FilterArtifacts filter = new FilterArtifacts();
244
245 filter.addFilter( new ProjectTransitivityFilter( project.getDependencyArtifacts(), this.excludeTransitive ) );
246
247 filter.addFilter( new ScopeFilter( DependencyUtil.cleanToBeTokenizedString( this.includeScope ),
248 DependencyUtil.cleanToBeTokenizedString( this.excludeScope ) ) );
249
250 filter.addFilter( new TypeFilter( DependencyUtil.cleanToBeTokenizedString( this.includeTypes ),
251 DependencyUtil.cleanToBeTokenizedString( this.excludeTypes ) ) );
252
253 filter.addFilter( new ClassifierFilter( DependencyUtil.cleanToBeTokenizedString( this.includeClassifiers ),
254 DependencyUtil.cleanToBeTokenizedString( this.excludeClassifiers ) ) );
255
256 filter.addFilter( new GroupIdFilter( DependencyUtil.cleanToBeTokenizedString( this.includeGroupIds ),
257 DependencyUtil.cleanToBeTokenizedString( this.excludeGroupIds ) ) );
258
259 filter.addFilter( new ArtifactIdFilter( DependencyUtil.cleanToBeTokenizedString( this.includeArtifactIds ),
260 DependencyUtil.cleanToBeTokenizedString( this.excludeArtifactIds ) ) );
261
262
263 @SuppressWarnings( "unchecked" ) Set<Artifact> artifacts = project.getArtifacts();
264
265
266 try
267 {
268 artifacts = filter.filter( artifacts );
269 }
270 catch ( ArtifactFilterException e )
271 {
272 throw new MojoExecutionException( e.getMessage(), e );
273 }
274
275
276 DependencyStatusSets status = null;
277 if ( StringUtils.isNotEmpty( classifier ) )
278 {
279 status = getClassifierTranslatedDependencies( artifacts, stopOnFailure );
280 }
281 else
282 {
283 status = filterMarkedDependencies( artifacts );
284 }
285
286 return status;
287 }
288
289
290
291
292
293
294
295
296
297
298 protected DependencyStatusSets getClassifierTranslatedDependencies( Set<Artifact> artifacts, boolean stopOnFailure )
299 throws MojoExecutionException
300 {
301 Set<Artifact> unResolvedArtifacts = new HashSet<Artifact>();
302 Set<Artifact> resolvedArtifacts = artifacts;
303 DependencyStatusSets status = new DependencyStatusSets();
304
305
306
307
308 if ( StringUtils.isNotEmpty( classifier ) )
309 {
310 ArtifactTranslator translator = new ClassifierTypeTranslator( this.classifier, this.type, this.factory );
311 artifacts = translator.translate( artifacts, getLog() );
312
313 status = filterMarkedDependencies( artifacts );
314
315
316 artifacts = status.getResolvedDependencies();
317
318
319 ArtifactsResolver artifactsResolver =
320 new DefaultArtifactsResolver( this.resolver, this.getLocal(), this.remoteRepos, stopOnFailure );
321 resolvedArtifacts = artifactsResolver.resolve( artifacts, getLog() );
322
323
324 unResolvedArtifacts.addAll( artifacts );
325 unResolvedArtifacts.removeAll( resolvedArtifacts );
326 }
327
328
329 status.setResolvedDependencies( resolvedArtifacts );
330 status.setUnResolvedDependencies( unResolvedArtifacts );
331
332 return status;
333 }
334
335
336
337
338
339
340
341
342 protected DependencyStatusSets filterMarkedDependencies( Set<Artifact> artifacts )
343 throws MojoExecutionException
344 {
345
346 FilterArtifacts filter = new FilterArtifacts();
347 filter.clearFilters();
348 filter.addFilter( getMarkedArtifactFilter() );
349
350 Set<Artifact> unMarkedArtifacts;
351 try
352 {
353 unMarkedArtifacts = filter.filter( artifacts );
354 }
355 catch ( ArtifactFilterException e )
356 {
357 throw new MojoExecutionException( e.getMessage(), e );
358 }
359
360
361 Set<Artifact> skippedArtifacts = new HashSet<Artifact>();
362 skippedArtifacts.addAll( artifacts );
363 skippedArtifacts.removeAll( unMarkedArtifacts );
364
365 return new DependencyStatusSets( unMarkedArtifacts, null, skippedArtifacts );
366 }
367
368
369
370
371 public File getMarkersDirectory()
372 {
373 return this.markersDirectory;
374 }
375
376
377
378
379 public void setMarkersDirectory( File theMarkersDirectory )
380 {
381 this.markersDirectory = theMarkersDirectory;
382 }
383
384
385
386
387
388
389 public boolean isPrependGroupId()
390 {
391 return prependGroupId;
392 }
393
394
395
396
397
398 public void setPrependGroupId( boolean prependGroupId )
399 {
400 this.prependGroupId = prependGroupId;
401 }
402 }