in maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java [139:211]
protected void doCollectDependencies(
RepositorySystemSession session,
RequestTrace trace,
DataPool pool,
DefaultDependencyCollectionContext context,
DefaultVersionFilterContext versionContext,
CollectRequest request,
DependencyNode node,
List<RemoteRepository> repositories,
List<Dependency> dependencies,
List<Dependency> managedDependencies,
Results results)
throws DependencyCollectionException {
boolean useSkip = ConfigUtils.getBoolean(session, DEFAULT_SKIPPER, CONFIG_PROP_SKIPPER);
int nThreads = ExecutorUtils.threadCount(session, DEFAULT_THREADS, CONFIG_PROP_THREADS);
logger.debug("Using thread pool with {} threads to resolve descriptors.", nThreads);
if (useSkip) {
logger.debug("Collector skip mode enabled");
}
try (DependencyResolutionSkipper skipper = useSkip
? DependencyResolutionSkipper.defaultSkipper()
: DependencyResolutionSkipper.neverSkipper();
ParallelDescriptorResolver parallelDescriptorResolver = new ParallelDescriptorResolver(nThreads)) {
Args args = new Args(session, pool, context, versionContext, request, skipper, parallelDescriptorResolver);
DependencySelector rootDepSelector = session.getDependencySelector() != null
? session.getDependencySelector().deriveChildSelector(context)
: null;
DependencyManager rootDepManager = session.getDependencyManager() != null
? session.getDependencyManager().deriveChildManager(context)
: null;
DependencyTraverser rootDepTraverser = session.getDependencyTraverser() != null
? session.getDependencyTraverser().deriveChildTraverser(context)
: null;
VersionFilter rootVerFilter = session.getVersionFilter() != null
? session.getVersionFilter().deriveChildFilter(context)
: null;
List<DependencyNode> parents = Collections.singletonList(node);
for (Dependency dependency : dependencies) {
RequestTrace childTrace =
collectStepTrace(trace, args.request.getRequestContext(), parents, dependency);
DependencyProcessingContext processingContext = new DependencyProcessingContext(
rootDepSelector,
rootDepManager,
rootDepTraverser,
rootVerFilter,
childTrace,
repositories,
managedDependencies,
parents,
dependency,
PremanagedDependency.create(rootDepManager, dependency, false, args.premanagedState));
if (!filter(processingContext)) {
processingContext.withDependency(processingContext.premanagedDependency.getManagedDependency());
resolveArtifactDescriptorAsync(args, processingContext, results);
args.dependencyProcessingQueue.add(processingContext);
}
}
while (!args.dependencyProcessingQueue.isEmpty()) {
processDependency(
args, results, args.dependencyProcessingQueue.remove(), Collections.emptyList(), false);
}
if (args.interruptedException.get() != null) {
throw new DependencyCollectionException(
results.getResult(), "Collection interrupted", args.interruptedException.get());
}
}
}