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