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 = "java-source" )
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 protected abstract ArtifactsFilter getMarkedArtifactFilter();
208
209
210
211
212
213
214
215 protected Set<Artifact> getResolvedDependencies( boolean stopOnFailure )
216 throws MojoExecutionException
217
218 {
219 DependencyStatusSets status = getDependencySets( stopOnFailure );
220
221 return status.getResolvedDependencies();
222 }
223
224
225
226
227
228
229
230
231
232
233
234 protected DependencyStatusSets getDependencySets( boolean stopOnFailure )
235 throws MojoExecutionException
236 {
237
238 FilterArtifacts filter = new FilterArtifacts();
239
240 filter.addFilter( new ProjectTransitivityFilter( project.getDependencyArtifacts(), this.excludeTransitive ) );
241
242 filter.addFilter( new ScopeFilter( DependencyUtil.cleanToBeTokenizedString( this.includeScope ),
243 DependencyUtil.cleanToBeTokenizedString( this.excludeScope ) ) );
244
245 filter.addFilter( new TypeFilter( DependencyUtil.cleanToBeTokenizedString( this.includeTypes ),
246 DependencyUtil.cleanToBeTokenizedString( this.excludeTypes ) ) );
247
248 filter.addFilter( new ClassifierFilter( DependencyUtil.cleanToBeTokenizedString( this.includeClassifiers ),
249 DependencyUtil.cleanToBeTokenizedString( this.excludeClassifiers ) ) );
250
251 filter.addFilter( new GroupIdFilter( DependencyUtil.cleanToBeTokenizedString( this.includeGroupIds ),
252 DependencyUtil.cleanToBeTokenizedString( this.excludeGroupIds ) ) );
253
254 filter.addFilter( new ArtifactIdFilter( DependencyUtil.cleanToBeTokenizedString( this.includeArtifactIds ),
255 DependencyUtil.cleanToBeTokenizedString( this.excludeArtifactIds ) ) );
256
257
258 @SuppressWarnings( "unchecked" ) Set<Artifact> artifacts = project.getArtifacts();
259
260
261 try
262 {
263 artifacts = filter.filter( artifacts );
264 }
265 catch ( ArtifactFilterException e )
266 {
267 throw new MojoExecutionException( e.getMessage(), e );
268 }
269
270
271 DependencyStatusSets status = null;
272 if ( StringUtils.isNotEmpty( classifier ) )
273 {
274 status = getClassifierTranslatedDependencies( artifacts, stopOnFailure );
275 }
276 else
277 {
278 status = filterMarkedDependencies( artifacts );
279 }
280
281 return status;
282 }
283
284
285
286
287
288
289
290
291
292
293 protected DependencyStatusSets getClassifierTranslatedDependencies( Set<Artifact> artifacts, boolean stopOnFailure )
294 throws MojoExecutionException
295 {
296 Set<Artifact> unResolvedArtifacts = new HashSet<Artifact>();
297 Set<Artifact> resolvedArtifacts = artifacts;
298 DependencyStatusSets status = new DependencyStatusSets();
299
300
301
302
303 if ( StringUtils.isNotEmpty( classifier ) )
304 {
305 ArtifactTranslator translator = new ClassifierTypeTranslator( this.classifier, this.type, this.factory );
306 artifacts = translator.translate( artifacts, getLog() );
307
308 status = filterMarkedDependencies( artifacts );
309
310
311 artifacts = status.getResolvedDependencies();
312
313
314 ArtifactsResolver artifactsResolver =
315 new DefaultArtifactsResolver( this.resolver, this.getLocal(), this.remoteRepos, stopOnFailure );
316 resolvedArtifacts = artifactsResolver.resolve( artifacts, getLog() );
317
318
319 unResolvedArtifacts.addAll( artifacts );
320 unResolvedArtifacts.removeAll( resolvedArtifacts );
321 }
322
323
324 status.setResolvedDependencies( resolvedArtifacts );
325 status.setUnResolvedDependencies( unResolvedArtifacts );
326
327 return status;
328 }
329
330
331
332
333
334
335
336
337 protected DependencyStatusSets filterMarkedDependencies( Set<Artifact> artifacts )
338 throws MojoExecutionException
339 {
340
341 FilterArtifacts filter = new FilterArtifacts();
342 filter.clearFilters();
343 filter.addFilter( getMarkedArtifactFilter() );
344
345 Set<Artifact> unMarkedArtifacts;
346 try
347 {
348 unMarkedArtifacts = filter.filter( artifacts );
349 }
350 catch ( ArtifactFilterException e )
351 {
352 throw new MojoExecutionException( e.getMessage(), e );
353 }
354
355
356 Set<Artifact> skippedArtifacts = new HashSet<Artifact>();
357 skippedArtifacts.addAll( artifacts );
358 skippedArtifacts.removeAll( unMarkedArtifacts );
359
360 return new DependencyStatusSets( unMarkedArtifacts, null, skippedArtifacts );
361 }
362
363
364
365
366 public File getMarkersDirectory()
367 {
368 return this.markersDirectory;
369 }
370
371
372
373
374 public void setMarkersDirectory( File theMarkersDirectory )
375 {
376 this.markersDirectory = theMarkersDirectory;
377 }
378
379
380
381
382
383
384 public boolean isPrependGroupId()
385 {
386 return prependGroupId;
387 }
388
389
390
391
392
393 public void setPrependGroupId( boolean prependGroupId )
394 {
395 this.prependGroupId = prependGroupId;
396 }
397 }