wei cai created MRESOLVER-240:
---------------------------------

             Summary: Using breadth-first approach to resolve maven dependencies
                 Key: MRESOLVER-240
                 URL: https://issues.apache.org/jira/browse/MRESOLVER-240
             Project: Maven Resolver
          Issue Type: Improvement
          Components: Resolver
    Affects Versions: 1.7.3
            Reporter: wei cai


There was discussions about the DFS or BFS algorithm for maven resolver in 
MRESOLVER-228, Changing to BFS would make MRESOLVER-228 & MRESOLVER-7 much 
easier to implement. Here is the plan for multiple changes requested recently:
 * DFS > BFS - preparation for parallel download
 * Skip & Reconcile - avoid unnecessary version resolution (MRESOLVER-228)
 * Download descriptors in parallel (MRESOLVER-7)

This Jira would focus on DFS -> BFS.

Basically maven would:
 * Go through all nodes and their dependencies starting from the root node to 
form a dependency graph.
 * Resolve the version conflicts by a nearest first approach (close to BFS) and 
determine the effective dependencies.

Changing DFS to BFS is just a sequence change (depth first -> width first), all 
nodes and their dependencies are still traversed, thus it won't change the 
dependency resolve result.

When changing to BFS, we cannot break below rules:
 * Exclusions and dependency management can be inherited from parent node.

 [PR|https://github.com/apache/maven-resolver/pull/144] (co-authored by 
@ibabiankou) is fired. The basic idea of this PR is:
 * Use queue instead of stack as required by BFS algorithm.
 * Track the objects such as DependencySelector, DependencyManager in 
DependencyProcessingContext and put into the queue, so inheritance of 
Exclusions and dependency management won't break.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to