org.apache.ivy.plugins.conflict
Class LatestCompatibleConflictManager

java.lang.Object
  extended by org.apache.ivy.plugins.conflict.AbstractConflictManager
      extended by org.apache.ivy.plugins.conflict.LatestConflictManager
          extended by 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.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.ivy.plugins.conflict.LatestConflictManager
LatestConflictManager.IvyNodeArtifactInfo, LatestConflictManager.NoConflictResolvedYetException
 
Constructor Summary
LatestCompatibleConflictManager()
           
LatestCompatibleConflictManager(java.lang.String name, LatestStrategy strategy)
           
 
Method Summary
 void handleAllBlacklistedRevisions(DependencyDescriptor dd, java.util.Collection foundBlacklisted)
          Method called when all revisions available for a version constraint have been blacklisted, and thus the dependency can't be resolved.
protected  void handleUnsolvableConflict(IvyNode parent, java.util.Collection conflicts, IvyNode node1, IvyNode node2)
           
 java.util.Collection resolveConflicts(IvyNode parent, java.util.Collection conflicts)
          Resolves the eventual conflicts found in the given collection of IvyNode.
 java.lang.String toString()
           
 
Methods inherited from class org.apache.ivy.plugins.conflict.LatestConflictManager
getStrategy, setLatest, setStrategy, toArtifactInfo
 
Methods inherited from class org.apache.ivy.plugins.conflict.AbstractConflictManager
getName, getSettings, setName, setSettings
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

LatestCompatibleConflictManager

public LatestCompatibleConflictManager()

LatestCompatibleConflictManager

public LatestCompatibleConflictManager(java.lang.String name,
                                       LatestStrategy strategy)
Method Detail

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 resolved
conflicts - 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