Class ConflictResolver
- All Implemented Interfaces:
DependencyGraphTransformer
ConflictResolver.VersionSelector
, ConflictResolver.ScopeSelector
, ConflictResolver.OptionalitySelector
and
ConflictResolver.ScopeDeriver
.
By default, this graph transformer will turn the dependency graph into a tree without duplicate artifacts. Using the
configuration property CONFIG_PROP_VERBOSE
, a verbose mode can be enabled where the graph is still turned
into a tree but all nodes participating in a conflict are retained. The nodes that were rejected during conflict
resolution have no children and link back to the winner node via the NODE_DATA_WINNER
key in their custom
data. Additionally, the keys NODE_DATA_ORIGINAL_SCOPE
and NODE_DATA_ORIGINAL_OPTIONALITY
are used
to store the original scope and optionality of each node. Obviously, the resulting dependency tree is not suitable
for artifact resolution unless a filter is employed to exclude the duplicate dependencies.
This transformer will query the keys TransformationContextKeys.CONFLICT_IDS
,
TransformationContextKeys.SORTED_CONFLICT_IDS
, TransformationContextKeys.CYCLIC_CONFLICT_IDS
for
existing information about conflict ids. In absence of this information, it will automatically invoke the
ConflictIdSorter
to calculate it.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic final class
A context used to hold information that is relevant for resolving version and scope conflicts.static final class
A conflicting dependency.static class
An extension point ofConflictResolver
that determines the effective optional flag of a dependency from a potentially conflicting set of derived optionalities.static final class
A context used to hold information that is relevant for deriving the scope of a child dependency.static class
An extension point ofConflictResolver
that determines the scope of a dependency in relation to the scope of its parent.static class
An extension point ofConflictResolver
that determines the effective scope of a dependency from a potentially conflicting set ofderived scopes
.static class
An extension point ofConflictResolver
that determines the winner among conflicting dependencies. -
Field Summary
Modifier and TypeFieldDescriptionstatic final String
The key in the repository session'sconfiguration properties
used to store aBoolean
flag controlling the transformer's verbose mode.static final String
The key in the dependency node'scustom data
under which the optional flag of the dependency before derivation and conflict resolution is stored.static final String
The key in the dependency node'scustom data
under which the scope of the dependency before scope derivation and conflict resolution is stored.static final String
The key in the dependency node'scustom data
under which a reference to theDependencyNode
which has won the conflict is stored. -
Constructor Summary
ConstructorDescriptionConflictResolver
(ConflictResolver.VersionSelector versionSelector, ConflictResolver.ScopeSelector scopeSelector, ConflictResolver.OptionalitySelector optionalitySelector, ConflictResolver.ScopeDeriver scopeDeriver) Creates a new conflict resolver instance with the specified hooks. -
Method Summary
Modifier and TypeMethodDescriptiontransformGraph
(DependencyNode node, DependencyGraphTransformationContext context) Transforms the dependency graph denoted by the specified root node.
-
Field Details
-
CONFIG_PROP_VERBOSE
The key in the repository session'sconfiguration properties
used to store aBoolean
flag controlling the transformer's verbose mode.- See Also:
-
NODE_DATA_WINNER
The key in the dependency node'scustom data
under which a reference to theDependencyNode
which has won the conflict is stored.- See Also:
-
NODE_DATA_ORIGINAL_SCOPE
The key in the dependency node'scustom data
under which the scope of the dependency before scope derivation and conflict resolution is stored.- See Also:
-
NODE_DATA_ORIGINAL_OPTIONALITY
The key in the dependency node'scustom data
under which the optional flag of the dependency before derivation and conflict resolution is stored.- See Also:
-
-
Constructor Details
-
ConflictResolver
public ConflictResolver(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 benull
.scopeSelector
- The scope selector to use, must not benull
.optionalitySelector
- The optionality selector ot use, must not benull
.scopeDeriver
- The scope deriver to use, must not benull
.
-
-
Method Details
-
transformGraph
public DependencyNode transformGraph(DependencyNode node, DependencyGraphTransformationContext context) throws RepositoryException Description copied from interface:DependencyGraphTransformer
Transforms the dependency graph denoted by the specified root node. The transformer may directly change the provided input graph or create a new graph, the former is recommended for performance reasons.- Specified by:
transformGraph
in interfaceDependencyGraphTransformer
- Parameters:
node
- The root node of the (possibly cyclic!) graph to transform, must not benull
.context
- The graph transformation context, must not benull
.- Returns:
- The result graph of the transformation, never
null
. - Throws:
RepositoryException
- If the transformation failed.
-