in maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java [124:271]
public final CollectResult collectDependencies(RepositorySystemSession session, CollectRequest request)
throws DependencyCollectionException {
requireNonNull(session, "session cannot be null");
requireNonNull(request, "request cannot be null");
InternalScopeManager scopeManager = (InternalScopeManager) session.getScopeManager();
session = setUpSession(session, request, scopeManager);
RequestTrace trace = RequestTrace.newChild(request.getTrace(), request);
CollectResult result = new CollectResult(request);
DependencyTraverser depTraverser = session.getDependencyTraverser();
VersionFilter verFilter = session.getVersionFilter();
Dependency root = request.getRoot();
List<RemoteRepository> repositories = request.getRepositories();
List<Dependency> dependencies = request.getDependencies();
List<Dependency> managedDependencies = request.getManagedDependencies();
Map<String, Object> stats = new LinkedHashMap<>();
long time1 = System.nanoTime();
DefaultDependencyNode node;
if (root != null) {
List<? extends Version> versions;
VersionRangeResult rangeResult;
try {
VersionRangeRequest rangeRequest = new VersionRangeRequest(
root.getArtifact(), request.getRepositories(), request.getRequestContext());
rangeRequest.setTrace(trace);
rangeResult = versionRangeResolver.resolveVersionRange(session, rangeRequest);
versions = filterVersions(root, rangeResult, verFilter, new DefaultVersionFilterContext(session));
} catch (VersionRangeResolutionException e) {
result.addException(e);
throw new DependencyCollectionException(result, e.getMessage());
}
Version version = versions.get(versions.size() - 1);
root = root.setArtifact(root.getArtifact().setVersion(version.toString()));
ArtifactDescriptorResult descriptorResult;
try {
ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
descriptorRequest.setArtifact(root.getArtifact());
descriptorRequest.setRepositories(request.getRepositories());
descriptorRequest.setRequestContext(request.getRequestContext());
descriptorRequest.setTrace(trace);
if (isLackingDescriptor(session, root.getArtifact())) {
descriptorResult = new ArtifactDescriptorResult(descriptorRequest);
} else {
descriptorResult = descriptorReader.readArtifactDescriptor(session, descriptorRequest);
for (ArtifactDecorator decorator :
Utils.getArtifactDecorators(session, artifactDecoratorFactories)) {
descriptorResult.setArtifact(decorator.decorateArtifact(descriptorResult));
}
}
} catch (ArtifactDescriptorException e) {
result.addException(e);
throw new DependencyCollectionException(result, e.getMessage());
}
root = root.setArtifact(descriptorResult.getArtifact());
if (!session.isIgnoreArtifactDescriptorRepositories()) {
repositories = remoteRepositoryManager.aggregateRepositories(
session, repositories, descriptorResult.getRepositories(), true);
}
dependencies = mergeDeps(dependencies, descriptorResult.getDependencies());
managedDependencies = mergeDeps(managedDependencies, descriptorResult.getManagedDependencies());
node = new DefaultDependencyNode(root);
node.setRequestContext(request.getRequestContext());
node.setRelocations(descriptorResult.getRelocations());
node.setVersionConstraint(rangeResult.getVersionConstraint());
node.setVersion(version);
node.setAliases(descriptorResult.getAliases());
node.setRepositories(request.getRepositories());
} else {
node = new DefaultDependencyNode(request.getRootArtifact());
node.setRequestContext(request.getRequestContext());
node.setRepositories(request.getRepositories());
}
result.setRoot(node);
boolean traverse = root == null || depTraverser == null || depTraverser.traverseDependency(root);
String errorPath = null;
if (traverse && !dependencies.isEmpty()) {
DataPool pool = new DataPool(session);
DefaultDependencyCollectionContext context = new DefaultDependencyCollectionContext(
session, request.getRootArtifact(), root, managedDependencies);
DefaultVersionFilterContext versionContext = new DefaultVersionFilterContext(session);
Results results = new Results(result, session);
doCollectDependencies(
session,
trace,
pool,
context,
versionContext,
request,
node,
repositories,
dependencies,
managedDependencies,
results);
errorPath = results.getErrorPath();
}
long time2 = System.nanoTime();
DependencyGraphTransformer transformer = session.getDependencyGraphTransformer();
if (transformer != null) {
try {
DefaultDependencyGraphTransformationContext context =
new DefaultDependencyGraphTransformationContext(session);
context.put(TransformationContextKeys.STATS, stats);
result.setRoot(transformer.transformGraph(node, context));
} catch (RepositoryException e) {
result.addException(e);
}
}
long time3 = System.nanoTime();
if (logger.isDebugEnabled()) {
stats.put(getClass().getSimpleName() + ".collectTime", time2 - time1);
stats.put(getClass().getSimpleName() + ".transformTime", time3 - time2);
logger.debug("Dependency collection stats {}", stats);
}
if (errorPath != null) {
throw new DependencyCollectionException(result, "Failed to collect dependencies at " + errorPath);
}
if (!result.getExceptions().isEmpty()) {
throw new DependencyCollectionException(result);
}
if (request.getResolutionScope() != null) {
return scopeManager.postProcess(request.getResolutionScope(), result);
} else {
return result;
}
}