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