in maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java [176:311]
private void processDependency(
Args args,
RequestTrace parent,
Results results,
List<RemoteRepository> repositories,
DependencySelector depSelector,
DependencyManager depManager,
DependencyTraverser depTraverser,
VersionFilter verFilter,
Dependency dependency,
List<Artifact> relocations,
boolean disableVersionManagement) {
if (depSelector != null && !depSelector.selectDependency(dependency)) {
return;
}
RequestTrace trace = collectStepTrace(parent, args.request.getRequestContext(), args.nodes.nodes, dependency);
PremanagedDependency preManaged =
PremanagedDependency.create(depManager, dependency, disableVersionManagement, args.premanagedState);
dependency = preManaged.getManagedDependency();
boolean noDescriptor = isLackingDescriptor(args.session, dependency.getArtifact());
boolean traverse = !noDescriptor && (depTraverser == null || depTraverser.traverseDependency(dependency));
List<? extends Version> versions;
VersionRangeResult rangeResult;
try {
VersionRangeRequest rangeRequest =
createVersionRangeRequest(args.request.getRequestContext(), trace, repositories, dependency);
rangeResult = cachedResolveRangeResult(rangeRequest, args.pool, args.session);
versions = filterVersions(dependency, rangeResult, verFilter, args.versionContext);
} catch (VersionRangeResolutionException e) {
results.addException(dependency, e, args.nodes.nodes);
return;
}
for (Version version : versions) {
Artifact originalArtifact = dependency.getArtifact().setVersion(version.toString());
Dependency d = dependency.setArtifact(originalArtifact);
ArtifactDescriptorRequest descriptorRequest =
createArtifactDescriptorRequest(args.request.getRequestContext(), trace, repositories, d);
final ArtifactDescriptorResult descriptorResult =
getArtifactDescriptorResult(args, results, noDescriptor, d, descriptorRequest);
if (descriptorResult != null) {
d = d.setArtifact(descriptorResult.getArtifact());
DependencyNode node = args.nodes.top();
int cycleEntry = DefaultDependencyCycle.find(args.nodes.nodes, d.getArtifact());
if (cycleEntry >= 0) {
results.addCycle(args.nodes.nodes, cycleEntry, d);
DependencyNode cycleNode = args.nodes.get(cycleEntry);
if (cycleNode.getDependency() != null) {
DefaultDependencyNode child = createDependencyNode(
relocations, preManaged, rangeResult, version, d, descriptorResult, cycleNode);
node.getChildren().add(child);
continue;
}
}
if (!descriptorResult.getRelocations().isEmpty()) {
boolean disableVersionManagementSubsequently =
originalArtifact.getGroupId().equals(d.getArtifact().getGroupId())
&& originalArtifact
.getArtifactId()
.equals(d.getArtifact().getArtifactId());
processDependency(
args,
parent,
results,
repositories,
depSelector,
depManager,
depTraverser,
verFilter,
d,
descriptorResult.getRelocations(),
disableVersionManagementSubsequently);
return;
} else {
d = args.pool.intern(d.setArtifact(args.pool.intern(d.getArtifact())));
List<RemoteRepository> repos =
getRemoteRepositories(rangeResult.getRepository(version), repositories);
DefaultDependencyNode child = createDependencyNode(
relocations,
preManaged,
rangeResult,
version,
d,
descriptorResult.getAliases(),
repos,
args.request.getRequestContext());
node.getChildren().add(child);
boolean recurse =
traverse && !descriptorResult.getDependencies().isEmpty();
if (recurse) {
doRecurse(
args,
parent,
results,
repositories,
depSelector,
depManager,
depTraverser,
verFilter,
d,
descriptorResult,
child);
}
}
} else {
DependencyNode node = args.nodes.top();
List<RemoteRepository> repos = getRemoteRepositories(rangeResult.getRepository(version), repositories);
DefaultDependencyNode child = createDependencyNode(
relocations,
preManaged,
rangeResult,
version,
d,
null,
repos,
args.request.getRequestContext());
node.getChildren().add(child);
}
}
}