in src/main/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolver.java [212:282]
private Set<Artifact> resolveTransitive(
RepositorySystemSession repositorySession, String scope, MavenProject project)
throws org.eclipse.aether.resolution.DependencyResolutionException {
// scope dependency filter
DependencyFilter scoopeDependencyFilter = DependencyFilterUtils.classpathFilter(scope);
// get project dependencies filtered by requested scope
List<Dependency> dependencies = project.getDependencies().stream()
.map(d -> RepositoryUtils.toDependency(d, repositorySession.getArtifactTypeRegistry()))
.filter(d -> scoopeDependencyFilter.accept(new DefaultDependencyNode(d), null))
.collect(Collectors.toList());
List<Dependency> managedDependencies = Optional.ofNullable(project.getDependencyManagement())
.map(DependencyManagement::getDependencies)
.map(list -> list.stream()
.map(d -> RepositoryUtils.toDependency(d, repositorySession.getArtifactTypeRegistry()))
.collect(Collectors.toList()))
.orElse(null);
CollectRequest collectRequest = new CollectRequest();
collectRequest.setManagedDependencies(managedDependencies);
collectRequest.setRepositories(project.getRemoteProjectRepositories());
collectRequest.setDependencies(dependencies);
collectRequest.setRootArtifact(RepositoryUtils.toArtifact(project.getArtifact()));
DependencyRequest request = new DependencyRequest(collectRequest, scoopeDependencyFilter);
DependencyResult dependencyResult = repositorySystem.resolveDependencies(repositorySession, request);
// cache for artifact mapping
Map<org.eclipse.aether.artifact.Artifact, Artifact> aetherToMavenArtifacts = new HashMap<>();
Deque<String> stack = new ArrayDeque<>();
stack.push(project.getArtifact().getId());
Set<Artifact> artifacts = new HashSet<>();
// we need rebuild artifact dependencyTrail - it is used by useTransitiveFiltering
dependencyResult.getRoot().accept(new DependencyVisitor() {
@Override
public boolean visitEnter(DependencyNode node) {
if (node.getDependency() != null) {
stack.push(aetherToMavenArtifacts
.computeIfAbsent(node.getDependency().getArtifact(), RepositoryUtils::toArtifact)
.getId());
}
return true;
}
@Override
public boolean visitLeave(DependencyNode node) {
Dependency dependency = node.getDependency();
if (dependency != null) {
Artifact artifact = aetherToMavenArtifacts.computeIfAbsent(
dependency.getArtifact(), RepositoryUtils::toArtifact);
if (artifact.isResolved() && artifact.getFile() != null) {
List<String> depTrail = new ArrayList<>();
stack.descendingIterator().forEachRemaining(depTrail::add);
artifact.setDependencyTrail(depTrail);
artifact.setOptional(dependency.isOptional());
artifact.setScope(dependency.getScope());
artifacts.add(artifact);
}
stack.pop();
}
return true;
}
});
return artifacts;
}