Class ClassicConflictResolver
- java.lang.Object
-
- org.eclipse.aether.util.graph.transformer.ConflictResolver
-
- org.eclipse.aether.util.graph.transformer.ClassicConflictResolver
-
- All Implemented Interfaces:
org.eclipse.aether.collection.DependencyGraphTransformer
public final class ClassicConflictResolver extends ConflictResolver
A legacy dependency graph transformer that resolves version and scope conflicts among dependencies. This implementation maintains backward compatibility with Maven 3.x and Resolver 1.x behavior but has O(N²) worst-case performance characteristics. For new projects, consider usingPathConflictResolver.For a given set of conflicting nodes, one node will be chosen as the winner. How losing nodes are handled depends on the configured verbosity level: they may be removed entirely, have their children removed, or be left in place with conflict information. The exact rules by which a winning node and its effective scope are determined are controlled by user-supplied implementations of
ConflictResolver.VersionSelector,ConflictResolver.ScopeSelector,ConflictResolver.OptionalitySelectorandConflictResolver.ScopeDeriver.Performance Characteristics:
- Time Complexity: O(N²) worst-case where N is the number of dependency nodes
- Memory Usage: Modifies the dependency graph in-place
- Scalability: Performance degrades significantly on large multi-module projects
Algorithm Overview:
- Depth-First Traversal: Walks the dependency graph depth-first
- In-Place Modification: Modifies nodes directly during traversal
- Conflict Detection: Identifies conflicts by comparing conflict IDs
- Winner Selection: Uses provided selectors to choose winners
- Loser Removal: Removes or marks losing nodes during traversal
When to Use:
- Exact backward compatibility with Maven 3.x/Resolver 1.x is required
- Debugging performance differences between old and new algorithms
- Small projects where performance is not a concern
- Testing and validation scenarios
Migration Recommendation: New projects should use
PathConflictResolverfor better performance. This implementation is retained primarily for compatibility and testing purposes.Implementation Note: This conflict resolver is identical to the one used in Maven 3/Resolver 1.x. The implementation may produce O(N²) worst-case performance on projects with many small conflict groups (typically one member each), which is common in large multi-module projects.
- Since:
- 2.0.11
- See Also:
PathConflictResolver
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.eclipse.aether.util.graph.transformer.ConflictResolver
ConflictResolver.OptionalitySelector, ConflictResolver.ScopeDeriver, ConflictResolver.ScopeSelector, ConflictResolver.Verbosity, ConflictResolver.VersionSelector
-
-
Field Summary
-
Fields inherited from class org.eclipse.aether.util.graph.transformer.ConflictResolver
AUTO_CONFLICT_RESOLVER, CLASSIC_CONFLICT_RESOLVER, CONFIG_PROP_CONFLICT_RESOLVER_IMPL, CONFIG_PROP_VERBOSE, DEFAULT_CONFLICT_RESOLVER_IMPL, NODE_DATA_ORIGINAL_OPTIONALITY, NODE_DATA_ORIGINAL_SCOPE, NODE_DATA_WINNER, PATH_CONFLICT_RESOLVER
-
-
Constructor Summary
Constructors Constructor Description ClassicConflictResolver(ConflictResolver.VersionSelector versionSelector, ConflictResolver.ScopeSelector scopeSelector, ConflictResolver.OptionalitySelector optionalitySelector, ConflictResolver.ScopeDeriver scopeDeriver)Creates a new conflict resolver instance with the specified hooks.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description org.eclipse.aether.graph.DependencyNodetransformGraph(org.eclipse.aether.graph.DependencyNode node, org.eclipse.aether.collection.DependencyGraphTransformationContext context)-
Methods inherited from class org.eclipse.aether.util.graph.transformer.ConflictResolver
getVerbosity
-
-
-
-
Constructor Detail
-
ClassicConflictResolver
public ClassicConflictResolver(ConflictResolver.VersionSelector versionSelector, ConflictResolver.ScopeSelector scopeSelector, ConflictResolver.OptionalitySelector optionalitySelector, ConflictResolver.ScopeDeriver scopeDeriver)
Creates a new conflict resolver instance with the specified hooks.- Parameters:
versionSelector- the version selector to use, must not benullscopeSelector- the scope selector to use, must not benulloptionalitySelector- the optionality selector ot use, must not benullscopeDeriver- the scope deriver to use, must not benull
-
-
Method Detail
-
transformGraph
public org.eclipse.aether.graph.DependencyNode transformGraph(org.eclipse.aether.graph.DependencyNode node, org.eclipse.aether.collection.DependencyGraphTransformationContext context) throws org.eclipse.aether.RepositoryException
- Specified by:
transformGraphin interfaceorg.eclipse.aether.collection.DependencyGraphTransformer- Overrides:
transformGraphin classConflictResolver- Throws:
org.eclipse.aether.RepositoryException
-
-