1 package org.apache.maven.shared.artifact.filter.collection;
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.RepositoryUtils;
23 import org.apache.maven.artifact.Artifact;
24 import org.apache.maven.project.DefaultProjectBuildingRequest;
25 import org.apache.maven.project.DependencyResolutionResult;
26 import org.apache.maven.project.ProjectBuilder;
27 import org.apache.maven.project.ProjectBuildingException;
28 import org.apache.maven.project.ProjectBuildingRequest;
29 import org.apache.maven.project.ProjectBuildingResult;
30 import org.eclipse.aether.graph.Dependency;
31
32 import java.util.LinkedHashSet;
33 import java.util.Set;
34
35
36
37
38
39
40 public class ArtifactTransitivityFilter
41 extends AbstractArtifactsFilter
42 {
43
44
45
46 private Set<String> transitiveArtifacts;
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 public ArtifactTransitivityFilter( Artifact artifact, ProjectBuildingRequest buildingRequest,
69 ProjectBuilder projectBuilder )
70 throws ProjectBuildingException
71 {
72 ProjectBuildingRequest request = new DefaultProjectBuildingRequest( buildingRequest );
73
74 request.setResolveDependencies( true );
75
76 ProjectBuildingResult buildingResult = projectBuilder.build( artifact, request );
77
78 DependencyResolutionResult resolutionResult = buildingResult.getDependencyResolutionResult();
79 if ( resolutionResult != null )
80 {
81 for ( Dependency dependency : resolutionResult.getDependencies() )
82 {
83 Artifact mavenArtifact = RepositoryUtils.toArtifact( dependency.getArtifact() );
84 transitiveArtifacts.add( mavenArtifact.getDependencyConflictId() );
85 }
86 }
87 }
88
89
90 public Set<Artifact> filter( Set<Artifact> artifacts )
91 {
92 Set<Artifact> result = new LinkedHashSet<>();
93 for ( Artifact artifact : artifacts )
94 {
95 if ( artifactIsATransitiveDependency( artifact ) )
96 {
97 result.add( artifact );
98 }
99 }
100 return result;
101 }
102
103
104
105
106
107
108
109 public boolean artifactIsATransitiveDependency( Artifact artifact )
110 {
111 return transitiveArtifacts.contains( artifact.getDependencyConflictId() );
112 }
113 }