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