Author: vsiveton
Date: Fri Apr 11 17:51:03 2008
New Revision: 647357

URL: http://svn.apache.org/viewvc?rev=647357&view=rev
Log:
o improved the dependency trail when an OverConstrainedVersionException occurred

Modified:
    
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
    
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java

Modified: 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java?rev=647357&r1=647356&r2=647357&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
 Fri Apr 11 17:51:03 2008
@@ -45,7 +45,7 @@
 
     private String classifier;
 
-    private Artifact artifact; 
+    private Artifact artifact;
 
     private List remoteRepositories;
 
@@ -200,6 +200,7 @@
             }
         }
 
+        sb.append( LS );
         sb.append( constructArtifactPath( path, "" ) );
         sb.append( LS );
         return sb.toString();

Modified: 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java?rev=647357&r1=647356&r2=647357&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
 Fri Apr 11 17:51:03 2008
@@ -33,8 +33,6 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -73,7 +71,7 @@
 
         ManagedVersionMap versionMap = getManagedVersionsMap( 
originatingArtifact, managedVersions );
 
-        recurse( root, resolvedArtifacts, versionMap, localRepository, 
remoteRepositories, source, filter,
+        recurse( originatingArtifact, root, resolvedArtifacts, versionMap, 
localRepository, remoteRepositories, source, filter,
                  listeners );
 
         Set set = new LinkedHashSet();
@@ -142,7 +140,7 @@
         return versionMap;
     }
 
-    private void recurse( ResolutionNode node, Map resolvedArtifacts, 
ManagedVersionMap managedVersions,
+    private void recurse( Artifact originatingArtifact, ResolutionNode node, 
Map resolvedArtifacts, ManagedVersionMap managedVersions,
                           ArtifactRepository localRepository, List 
remoteRepositories, ArtifactMetadataSource source,
                           ArtifactFilter filter, List listeners )
         throws CyclicDependencyException, ArtifactResolutionException, 
OverConstrainedVersionException
@@ -150,7 +148,7 @@
         fireEvent( ResolutionListener.TEST_ARTIFACT, listeners, node );
 
         Object key = node.getKey();
-        
+
         // TODO: Does this check need to happen here?  Had to add the same call
         // below when we iterate on child nodes -- will that suffice?
         if ( managedVersions.containsKey( key ))
@@ -192,7 +190,7 @@
                         for ( int j = 0; j < 2; j++ )
                         {
                             Artifact resetArtifact = 
resetNodes[j].getArtifact();
-                            
+
                             //MNG-2123: if the previous node was not a range, 
then it wouldn't have any available
                             //versions. We just clobbered the selected version 
above. (why? i have no idea.)
                             //So since we are here and this is ranges we must 
go figure out the version (for a third time...)
@@ -220,7 +218,7 @@
                                     }
                                 }
                                 //end hack
-                               
+
                                 //MNG-2861: match version can return null
                                 ArtifactVersion selectedVersion = 
resetArtifact.getVersionRange().matchVersion( 
resetArtifact.getAvailableVersions() );
                                 if (selectedVersion != null)
@@ -231,7 +229,7 @@
                                 {
                                   throw new OverConstrainedVersionException(" 
Unable to find a version in "+ resetArtifact.getAvailableVersions()+" to match 
the range "+ resetArtifact.getVersionRange(), resetArtifact);
                                 }
-                                
+
                                 fireEvent( 
ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, resetNodes[j] );
                             }
                         }
@@ -305,7 +303,7 @@
                             // managed version's POM, *not* any other 
version's POM.
                             // We retrieve the POM below in the retrieval step.
                             manageArtifact( child, managedVersions, listeners 
);
-                            
+
                             // Also, we need to ensure that any exclusions it 
presents are
                             // added to the artifact before we retrieve the 
metadata
                             // for the artifact; otherwise we may end up with 
unwanted
@@ -354,18 +352,32 @@
 
                                 if ( version == null )
                                 {
+                                    // Getting the dependency trail so it can 
be logged in the exception
+                                    List dependencyTrail = new ArrayList();
+                                    dependencyTrail.add( originatingArtifact );
+                                    for ( Iterator it = 
previousNodes.iterator(); it.hasNext(); )
+                                    {
+                                        ResolutionNode resolutionNode = 
(ResolutionNode) it.next();
+
+                                        if ( originatingArtifact.equals( 
resolutionNode.getArtifact() ) )
+                                        {
+                                            continue;
+                                        }
+                                        dependencyTrail.add( 
resolutionNode.getArtifact() );
+                                    }
+                                    dependencyTrail.add( artifact );
+                                    artifact.setDependencyTrail( 
dependencyTrail );
+
                                     if ( versions.isEmpty() )
                                     {
                                         throw new 
OverConstrainedVersionException(
                                             "No versions are present in the 
repository for the artifact with a range " +
                                                 versionRange, artifact, 
remoteRepositories );
                                     }
-                                    else
-                                    {
-                                        throw new 
OverConstrainedVersionException( "Couldn't find a version in " +
-                                            versions + " to match range " + 
versionRange, artifact,
-                                                                               
           remoteRepositories );
-                                    }
+
+                                    throw new OverConstrainedVersionException( 
"Couldn't find a version in " +
+                                        versions + " to match range " + 
versionRange, artifact,
+                                                                               
       remoteRepositories );
                                 }
                             }
 
@@ -405,7 +417,7 @@
                             e );
                     }
 
-                    recurse( child, resolvedArtifacts, managedVersions, 
localRepository, remoteRepositories, source,
+                    recurse( originatingArtifact, child, resolvedArtifacts, 
managedVersions, localRepository, remoteRepositories, source,
                              filter, listeners );
                 }
             }


Reply via email to