in maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java [214:343]
private void processDependency(
Args args,
Results results,
DependencyProcessingContext context,
List<Artifact> relocations,
boolean disableVersionManagement) {
if (Thread.interrupted()) {
args.interruptedException.set(new InterruptedException());
}
if (args.interruptedException.get() != null) {
return;
}
Dependency dependency = context.dependency;
PremanagedDependency preManaged = context.premanagedDependency;
boolean noDescriptor = isLackingDescriptor(args.session, dependency.getArtifact());
boolean traverse =
!noDescriptor && (context.depTraverser == null || context.depTraverser.traverseDependency(dependency));
Future<DescriptorResolutionResult> resolutionResultFuture = args.resolver.find(dependency.getArtifact());
DescriptorResolutionResult resolutionResult;
VersionRangeResult rangeResult;
try {
resolutionResult = resolutionResultFuture.get();
rangeResult = resolutionResult.rangeResult;
} catch (Exception e) {
results.addException(dependency, e, context.parents);
return;
}
Set<Version> versions = resolutionResult.descriptors.keySet();
for (Version version : versions) {
Artifact originalArtifact = dependency.getArtifact().setVersion(version.toString());
Dependency d = dependency.setArtifact(originalArtifact);
final ArtifactDescriptorResult descriptorResult = resolutionResult.descriptors.get(version);
if (descriptorResult != null) {
d = d.setArtifact(descriptorResult.getArtifact());
int cycleEntry = find(context.parents, d.getArtifact());
if (cycleEntry >= 0) {
results.addCycle(context.parents, cycleEntry, d);
DependencyNode cycleNode = context.parents.get(cycleEntry);
if (cycleNode.getDependency() != null) {
DefaultDependencyNode child = createDependencyNode(
relocations, preManaged, rangeResult, version, d, descriptorResult, cycleNode);
context.getParent().getChildren().add(child);
continue;
}
}
if (!descriptorResult.getRelocations().isEmpty()) {
boolean disableVersionManagementSubsequently =
originalArtifact.getGroupId().equals(d.getArtifact().getGroupId())
&& originalArtifact
.getArtifactId()
.equals(d.getArtifact().getArtifactId());
PremanagedDependency premanagedDependency = PremanagedDependency.create(
context.depManager, d, disableVersionManagementSubsequently, args.premanagedState);
DependencyProcessingContext relocatedContext = new DependencyProcessingContext(
context.depSelector,
context.depManager,
context.depTraverser,
context.verFilter,
context.trace,
context.repositories,
descriptorResult.getManagedDependencies(),
context.parents,
d,
premanagedDependency);
if (!filter(relocatedContext)) {
relocatedContext.withDependency(premanagedDependency.getManagedDependency());
resolveArtifactDescriptorAsync(args, relocatedContext, results);
processDependency(
args,
results,
relocatedContext,
descriptorResult.getRelocations(),
disableVersionManagementSubsequently);
}
return;
} else {
d = args.pool.intern(d.setArtifact(args.pool.intern(d.getArtifact())));
List<RemoteRepository> repos =
getRemoteRepositories(rangeResult.getRepository(version), context.repositories);
DefaultDependencyNode child = createDependencyNode(
relocations,
preManaged,
rangeResult,
version,
d,
descriptorResult.getAliases(),
repos,
args.request.getRequestContext());
context.getParent().getChildren().add(child);
boolean recurse =
traverse && !descriptorResult.getDependencies().isEmpty();
DependencyProcessingContext parentContext = context.withDependency(d);
if (recurse) {
doRecurse(args, parentContext, descriptorResult, child, results, disableVersionManagement);
} else if (!args.skipper.skipResolution(child, parentContext.parents)) {
List<DependencyNode> parents = new ArrayList<>(parentContext.parents.size() + 1);
parents.addAll(parentContext.parents);
parents.add(child);
args.skipper.cache(child, parents);
}
}
} else {
List<RemoteRepository> repos =
getRemoteRepositories(rangeResult.getRepository(version), context.repositories);
DefaultDependencyNode child = createDependencyNode(
relocations,
preManaged,
rangeResult,
version,
d,
null,
repos,
args.request.getRequestContext());
context.getParent().getChildren().add(child);
}
}
}