org.apache.ivy.plugins.conflict
Class LatestCompatibleConflictManager
java.lang.Object
org.apache.ivy.plugins.conflict.AbstractConflictManager
org.apache.ivy.plugins.conflict.LatestConflictManager
org.apache.ivy.plugins.conflict.LatestCompatibleConflictManager
- All Implemented Interfaces:
- ConflictManager, IvySettingsAware
public class LatestCompatibleConflictManager
- extends LatestConflictManager
This conflict manager can be used to allow only compatible dependencies to be used together (like
the strict conflict manager), but it has the advantage of using a best effort algorithm to find a
set of compatible dependencies, even if it requires stepping back to older revisions (as long as
they are in the set of compatibility).
Here is an example of what this conflict manager is able to do:
Available Modules:
#A;2->{ #B;[1.0,1.5] #C;[2.0,2.5] }
#B;1.4->#D;1.5
#B;1.5->#D;2.0
#C;2.5->#D;[1.0,1.6]
Result: #B;1.4, #C;2.5, #D;1.5
DetailsThe conflict manager finds that the latest matching version
of #B (1.5) depends on a version of #D incompatible with what is expected by the latest matching
version of #C. Hence the conflict manager blacklists #B;1.5, and the version range [1.0,1.5] is
resolved again to end up with #B;1.4 which depends on #D;1.5, which is fine to work with #C;2.5.
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
LatestCompatibleConflictManager
public LatestCompatibleConflictManager()
LatestCompatibleConflictManager
public LatestCompatibleConflictManager(java.lang.String name,
LatestStrategy strategy)
resolveConflicts
public java.util.Collection resolveConflicts(IvyNode parent,
java.util.Collection conflicts)
- Description copied from interface:
ConflictManager
- Resolves the eventual conflicts found in the given collection of IvyNode. This method return
a Collection of IvyNode which have not been evicted. The given conflicts Collection contains
at least one IvyNode. This method can be called with IvyNodes which are not yet loaded. If
this conflict manager is not able to resolve conflicts with the current data found in the
IvyNodes and need them to be fully loaded, it will return null to indicate that no conflict
resolution has been done.
- Specified by:
resolveConflicts
in interface ConflictManager
- Overrides:
resolveConflicts
in class LatestConflictManager
- Parameters:
parent
- the ivy node parent for which the conflict is to be resolvedconflicts
- the collection of IvyNode to check for conflicts
- Returns:
- a Collection of IvyNode which have not been evicted, or null if conflict management
resolution is not possible yet
handleUnsolvableConflict
protected void handleUnsolvableConflict(IvyNode parent,
java.util.Collection conflicts,
IvyNode node1,
IvyNode node2)
handleAllBlacklistedRevisions
public void handleAllBlacklistedRevisions(DependencyDescriptor dd,
java.util.Collection foundBlacklisted)
- Description copied from interface:
ConflictManager
- Method called when all revisions available for a version constraint have been blacklisted,
and thus the dependency can't be resolved.
This will never happen if the conflict manager doesn't blacklist any module, so providing an
empty implementation in this case is fine.
- Specified by:
handleAllBlacklistedRevisions
in interface ConflictManager
- Overrides:
handleAllBlacklistedRevisions
in class AbstractConflictManager
- Parameters:
dd
- the dependency descriptor for which all revisions are blacklisted.foundBlacklisted
- the list of all ModuleRevisionId found which are blacklisted
toString
public java.lang.String toString()
- Overrides:
toString
in class LatestConflictManager