You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2005/10/07 08:45:45 UTC

svn commit: r307034 [1/2] - in /maven/components/trunk: maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/ maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/ maven-artifact-manager/src/main/java/org/apache/maven...

Author: brett
Date: Thu Oct  6 23:44:59 2005
New Revision: 307034

URL: http://svn.apache.org/viewcvs?rev=307034&view=rev
Log:
PR: MNG-1110
differentiate between an artifact that is not found, and failure to obtain an artifact

Added:
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java   (with props)
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java   (with props)
Modified:
    maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java
    maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
    maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
    maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/TransitiveArtifactResolutionException.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginNotFoundException.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/usability/ArtifactResolverDiagnoser.java
    maven/components/trunk/maven-plugins/maven-eclipse-plugin/pom.xml
    maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/AttachedArtifact.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java

Modified: maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java (original)
+++ maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java Thu Oct  6 23:44:59 2005
@@ -21,6 +21,7 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.model.Build;
@@ -66,8 +67,8 @@
     private static final String DEFAULT_RESOURCE_DIR = "/src/main/resources";
 
     private static final String DEFAULT_SOURCE_DIR = "/src/main/java";
-    
-    
+
+
     private VelocityComponent velocity;
 
     private ArtifactResolver artifactResolver;
@@ -82,12 +83,8 @@
     // artifactId = maven-foo-archetype
     // version = latest
 
-    public void createArchetype( String archetypeGroupId,
-                                 String archetypeArtifactId,
-                                 String archetypeVersion,
-                                 ArtifactRepository localRepository,
-                                 List remoteRepositories,
-                                 Map parameters )
+    public void createArchetype( String archetypeGroupId, String archetypeArtifactId, String archetypeVersion,
+                                 ArtifactRepository localRepository, List remoteRepositories, Map parameters )
         throws ArchetypeNotFoundException, ArchetypeDescriptorException, ArchetypeTemplateProcessingException
     {
         // ----------------------------------------------------------------------
@@ -103,6 +100,11 @@
         }
         catch ( ArtifactResolutionException e )
         {
+            // TODO: this is an error now, not "not found"
+            throw new ArchetypeNotFoundException( "Cannot download archetype.", e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
             throw new ArchetypeNotFoundException( "Cannot download archetype.", e );
         }
 
@@ -115,7 +117,8 @@
             {
                 getLogger().info( "----------------------------------------------------------------------------" );
 
-                getLogger().info( "Using following parameters for creating Archetype: " + archetypeArtifactId + ":" + archetypeVersion );
+                getLogger().info( "Using following parameters for creating Archetype: " + archetypeArtifactId + ":" +
+                    archetypeVersion );
 
                 getLogger().info( "----------------------------------------------------------------------------" );
 
@@ -160,7 +163,8 @@
 
             if ( is == null )
             {
-                throw new ArchetypeDescriptorException( "The " + ARCHETYPE_DESCRIPTOR + " descriptor cannot be found." );
+                throw new ArchetypeDescriptorException(
+                    "The " + ARCHETYPE_DESCRIPTOR + " descriptor cannot be found." );
             }
 
             descriptor = (ArchetypeDescriptor) builder.build( new InputStreamReader( is ) );
@@ -192,7 +196,8 @@
 
             if ( outputDirectoryFile.exists() )
             {
-                throw new ArchetypeTemplateProcessingException( outputDirectoryFile.getName() + " already exists - please run from a clean directory" );
+                throw new ArchetypeTemplateProcessingException(
+                    outputDirectoryFile.getName() + " already exists - please run from a clean directory" );
             }
 
             pomFile = new File( outputDirectoryFile, ARCHETYPE_POM );
@@ -263,14 +268,15 @@
 
             if ( getLogger().isDebugEnabled() )
             {
-                getLogger().debug( "********************* Debug info for resources created from generated Model ***********************" );
+                getLogger().debug(
+                    "********************* Debug info for resources created from generated Model ***********************" );
             }
 
             if ( getLogger().isDebugEnabled() )
             {
                 getLogger().debug( "Was build element found in generated POM?: " + foundBuildElement );
             }
-            
+
             // create source directory if specified in POM
             if ( foundBuildElement && null != build.getSourceDirectory() )
             {
@@ -285,7 +291,8 @@
 
                 srcDirectory = StringUtils.replace( srcDirectory, "\\", "/" );
 
-                FileUtils.mkdir( outputDirectory + ( srcDirectory.startsWith( "/" ) ? srcDirectory : ( "/" + srcDirectory ) ) );
+                FileUtils.mkdir(
+                    outputDirectory + ( srcDirectory.startsWith( "/" ) ? srcDirectory : ( "/" + srcDirectory ) ) );
             }
 
             // create script source directory if specified in POM
@@ -303,7 +310,7 @@
                 scriptSourceDirectory = StringUtils.replace( scriptSourceDirectory, "\\", "/" );
 
                 FileUtils.mkdir( outputDirectory + ( scriptSourceDirectory.startsWith( "/" ) ? scriptSourceDirectory
-                                                               : ( "/" + scriptSourceDirectory ) ) );
+                    : ( "/" + scriptSourceDirectory ) ) );
             }
 
             // create resource director(y/ies) if specified in POM
@@ -326,7 +333,8 @@
 
                     resourceDirectory = StringUtils.replace( resourceDirectory, "\\", "/" );
 
-                    FileUtils.mkdir( outputDirectory + ( resourceDirectory.startsWith( "/" ) ? resourceDirectory : ( "/" + resourceDirectory ) ) );
+                    FileUtils.mkdir( outputDirectory +
+                        ( resourceDirectory.startsWith( "/" ) ? resourceDirectory : ( "/" + resourceDirectory ) ) );
                 }
             }
             // create test source directory if specified in POM
@@ -343,7 +351,8 @@
 
                 testDirectory = StringUtils.replace( testDirectory, "\\", "/" );
 
-                FileUtils.mkdir( outputDirectory + ( testDirectory.startsWith( "/" ) ? testDirectory : ( "/" + testDirectory ) ) );
+                FileUtils.mkdir(
+                    outputDirectory + ( testDirectory.startsWith( "/" ) ? testDirectory : ( "/" + testDirectory ) ) );
             }
 
             // create test resource directory if specified in POM
@@ -367,11 +376,12 @@
                     testResourceDirectory = StringUtils.replace( testResourceDirectory, "\\", "/" );
 
                     FileUtils.mkdir( outputDirectory + ( testResourceDirectory.startsWith( "/" ) ? testResourceDirectory
-                                                                   : ( "/" + testResourceDirectory ) ) );
+                        : ( "/" + testResourceDirectory ) ) );
                 }
             }
 
-            getLogger().info( "********************* End of debug info from resources from generated POM ***********************" );
+            getLogger().info(
+                "********************* End of debug info from resources from generated POM ***********************" );
 
             // ----------------------------------------------------------------------
             // Main
@@ -473,8 +483,8 @@
         }
     }
 
-    protected void processTemplate( String outputDirectory, Context context, String template,
-                                   boolean packageInFileName, String packageName )
+    protected void processTemplate( String outputDirectory, Context context, String template, boolean packageInFileName,
+                                    String packageName )
         throws Exception
     {
         File f;

Modified: maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java (original)
+++ maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java Thu Oct  6 23:44:59 2005
@@ -21,6 +21,7 @@
 import org.apache.maven.artifact.manager.WagonManager;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -176,6 +177,11 @@
         catch ( ArtifactResolutionException e )
         {
             throw new BuildException( "Unable to resolve artifact", e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // TODO: improve handling
+            throw new BuildException( "Unable to locate artifact", e );
         }
 
         if ( pathId != null && getProject().getReference( pathId ) != null )

Modified: maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java (original)
+++ maven/components/trunk/maven-artifact-ant/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java Thu Oct  6 23:44:59 2005
@@ -20,6 +20,7 @@
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -102,6 +103,10 @@
             throw new BuildException( "Unable to locate wagon provider in remote repository", e );
         }
         catch ( InvalidVersionSpecificationException e )
+        {
+            throw new BuildException( "Unable to locate wagon provider in remote repository", e );
+        }
+        catch ( ArtifactNotFoundException e )
         {
             throw new BuildException( "Unable to locate wagon provider in remote repository", e );
         }

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Thu Oct  6 23:44:59 2005
@@ -59,20 +59,20 @@
     // ----------------------------------------------------------------------
 
     public void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         resolve( artifact, remoteRepositories, localRepository, false );
     }
 
     public void resolveAlways( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         resolve( artifact, remoteRepositories, localRepository, true );
     }
 
     private void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository,
                           boolean force )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         if ( artifact != null )
         {
@@ -82,7 +82,7 @@
 
                 if ( !systemFile.exists() )
                 {
-                    throw new ArtifactResolutionException(
+                    throw new ArtifactNotFoundException(
                         "System artifact: " + artifact.getId() + " not found in path: " + systemFile, artifact );
                 }
                 else
@@ -143,7 +143,7 @@
                     }
                     catch ( ResourceDoesNotExistException e )
                     {
-                        throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
+                        throw new ArtifactNotFoundException( e.getMessage(), artifact, remoteRepositories, e );
                     }
                     catch ( TransferFailedException e )
                     {
@@ -179,7 +179,7 @@
     public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact,
                                                          ArtifactRepository localRepository, List remoteRepositories,
                                                          ArtifactMetadataSource source, ArtifactFilter filter )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         return resolveTransitively( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository,
                                     remoteRepositories, source, filter );
@@ -189,7 +189,7 @@
     public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact,
                                                          Map managedVersions, ArtifactRepository localRepository,
                                                          List remoteRepositories, ArtifactMetadataSource source )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         return resolveTransitively( artifacts, originatingArtifact, managedVersions, localRepository,
                                     remoteRepositories, source, null );
@@ -199,7 +199,7 @@
                                                          Map managedVersions, ArtifactRepository localRepository,
                                                          List remoteRepositories, ArtifactMetadataSource source,
                                                          ArtifactFilter filter )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         // TODO: this is simplistic
         List listeners = new ArrayList();
@@ -219,7 +219,7 @@
                                                          Map managedVersions, ArtifactRepository localRepository,
                                                          List remoteRepositories, ArtifactMetadataSource source,
                                                          ArtifactFilter filter, List listeners )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         ArtifactResolutionResult artifactResolutionResult;
         artifactResolutionResult = artifactCollector.collect( artifacts, originatingArtifact, managedVersions,
@@ -238,7 +238,7 @@
     public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact,
                                                          List remoteRepositories, ArtifactRepository localRepository,
                                                          ArtifactMetadataSource source )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         return resolveTransitively( artifacts, originatingArtifact, localRepository, remoteRepositories, source, null );
     }
@@ -246,7 +246,7 @@
     public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact,
                                                          List remoteRepositories, ArtifactRepository localRepository,
                                                          ArtifactMetadataSource source, List listeners )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         return resolveTransitively( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository,
                                     remoteRepositories, source, null, listeners );

Modified: maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java Thu Oct  6 23:44:59 2005
@@ -205,7 +205,7 @@
             artifactResolver.resolve( k, remoteRepositories(), localRepository() );
             fail( "Resolution succeeded when it should have failed" );
         }
-        catch ( ArtifactResolutionException expected )
+        catch ( ArtifactNotFoundException expected )
         {
             assertTrue( true );
         }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java Thu Oct  6 23:44:59 2005
@@ -20,6 +20,8 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
 import org.apache.maven.artifact.versioning.VersionRange;
 
 import java.io.File;
@@ -154,4 +156,10 @@
     void setAvailableVersions( List versions );
 
     boolean isOptional();
+
+    ArtifactVersion getSelectedVersion()
+        throws OverConstrainedVersionException;
+
+    boolean isSelectedVersionKnown()
+        throws OverConstrainedVersionException;
 }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java Thu Oct  6 23:44:59 2005
@@ -20,6 +20,8 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -519,5 +521,17 @@
     public boolean isOptional()
     {
         return optional;
+    }
+
+    public ArtifactVersion getSelectedVersion()
+        throws OverConstrainedVersionException
+    {
+        return versionRange.getSelectedVersion( this );
+    }
+
+    public boolean isSelectedVersionKnown()
+        throws OverConstrainedVersionException
+    {
+        return versionRange.isSelectedVersionKnown( this );
     }
 }

Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java?rev=307034&view=auto
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java (added)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java Thu Oct  6 23:44:59 2005
@@ -0,0 +1,188 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Base class for artifact resolution exceptions.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class AbstractArtifactResolutionException
+    extends Exception
+{
+    private String groupId;
+
+    private String artifactId;
+
+    private String version;
+
+    private String type;
+
+    private List remoteRepositories;
+
+    private final String originalMessage;
+
+    private final String path;
+
+    static final String LS = System.getProperty( "line.separator" );
+
+    protected AbstractArtifactResolutionException( String message, String groupId, String artifactId, String version,
+                                                   String type, List remoteRepositories, List path )
+    {
+        super( constructMessageBase( message, groupId, artifactId, version, type, remoteRepositories, path ) );
+
+        this.originalMessage = message;
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.type = type;
+        this.version = version;
+        this.remoteRepositories = remoteRepositories;
+        this.path = constructArtifactPath( path );
+    }
+
+    protected AbstractArtifactResolutionException( String message, String groupId, String artifactId, String version,
+                                                   String type, List remoteRepositories, List path, Throwable t )
+    {
+        super( constructMessageBase( message, groupId, artifactId, version, type, remoteRepositories, path ), t );
+
+        this.originalMessage = message;
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.type = type;
+        this.version = version;
+        this.remoteRepositories = remoteRepositories;
+        this.path = constructArtifactPath( path );
+    }
+
+    protected AbstractArtifactResolutionException( String message, Artifact artifact )
+    {
+        this( message, artifact, null );
+    }
+
+    protected AbstractArtifactResolutionException( String message, Artifact artifact, List remoteRepositories )
+    {
+        this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
+              remoteRepositories, artifact.getDependencyTrail() );
+    }
+
+    protected AbstractArtifactResolutionException( String message, Artifact artifact, List remoteRepositories,
+                                                   Throwable t )
+    {
+        this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
+              remoteRepositories, artifact.getDependencyTrail(), t );
+    }
+
+    public String getGroupId()
+    {
+        return groupId;
+    }
+
+    public String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public String getType()
+    {
+        return type;
+    }
+
+    public List getRemoteRepositories()
+    {
+        return remoteRepositories;
+    }
+
+    public String getOriginalMessage()
+    {
+        return originalMessage;
+    }
+
+    protected static String constructArtifactPath( List path )
+    {
+        StringBuffer sb = new StringBuffer();
+
+        if ( path != null )
+        {
+            sb.append( LS );
+            sb.append( "Path to dependency: " );
+            sb.append( LS );
+            int num = 1;
+            for ( Iterator i = path.iterator(); i.hasNext(); )
+            {
+                sb.append( "\t" );
+                sb.append( num++ );
+                sb.append( ") " );
+                sb.append( i.next() );
+                sb.append( LS );
+            }
+        }
+
+        return sb.toString();
+    }
+
+    private static String constructMessageBase( String message, String groupId, String artifactId, String version,
+                                                String type, List remoteRepositories, List path )
+    {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append( message );
+        sb.append( LS );
+        sb.append( "  " + groupId + ":" + artifactId + ":" + version + ":" + type );
+        sb.append( LS );
+        if ( remoteRepositories != null && !remoteRepositories.isEmpty() )
+        {
+            sb.append( LS );
+            sb.append( "from the specified remote repositories:" );
+            sb.append( LS + "  " );
+
+            for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
+            {
+                ArtifactRepository remoteRepository = (ArtifactRepository) i.next();
+
+                sb.append( remoteRepository.getId() );
+                sb.append( " (" );
+                sb.append( remoteRepository.getUrl() );
+                sb.append( ")" );
+                if ( i.hasNext() )
+                {
+                    sb.append( ",\n  " );
+                }
+            }
+        }
+
+        sb.append( constructArtifactPath( path ) );
+        sb.append( LS );
+        return sb.toString();
+    }
+
+    public String getArtifactPath()
+    {
+        return path;
+    }
+}

Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java?rev=307034&view=auto
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java (added)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java Thu Oct  6 23:44:59 2005
@@ -0,0 +1,97 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ * @version $Id$
+ */
+public class ArtifactNotFoundException
+    extends AbstractArtifactResolutionException
+{
+    private String downloadUrl;
+
+    protected ArtifactNotFoundException( String message, Artifact artifact )
+    {
+        this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(), null,
+              null );
+    }
+
+    protected ArtifactNotFoundException( String message, Artifact artifact, List remoteRepositories, Throwable t )
+    {
+        this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
+              remoteRepositories, null, t );
+    }
+
+    public ArtifactNotFoundException( String message, String groupId, String artifactId, String version, String type,
+                                      List remoteRepositories, String downloadUrl, Throwable t )
+    {
+        super( constructMessage( message, groupId, artifactId, version, type, downloadUrl ), groupId, artifactId,
+               version, type, remoteRepositories, null, t );
+
+        this.downloadUrl = downloadUrl;
+    }
+
+    private ArtifactNotFoundException( String message, String groupId, String artifactId, String version, String type,
+                                       List remoteRepositories, String downloadUrl )
+    {
+        super( constructMessage( message, groupId, artifactId, version, type, downloadUrl ), groupId, artifactId,
+               version, type, remoteRepositories, null );
+
+        this.downloadUrl = downloadUrl;
+    }
+
+    private static String constructMessage( String message, String groupId, String artifactId, String version,
+                                            String type, String downloadUrl )
+    {
+        StringBuffer sb = new StringBuffer( message );
+
+        if ( downloadUrl != null && !"pom".equals( type ) )
+        {
+            sb.append( LS );
+            sb.append( LS );
+            sb.append( "Try downloading the file manually from" );
+            sb.append( LS );
+            sb.append( "  " );
+            sb.append( downloadUrl );
+            sb.append( LS );
+            sb.append( "and install it using the command: " );
+            sb.append( LS );
+            sb.append( "  m2 install:install-file -DgroupId=" );
+            sb.append( groupId );
+            sb.append( " -DartifactId=" );
+            sb.append( artifactId );
+            sb.append( " -Dversion=" );
+            sb.append( version );
+            sb.append( " -Dpackaging=" );
+            sb.append( type );
+            sb.append( " -Dfile=/path/to/file" );
+        }
+
+        return sb.toString();
+    }
+
+    public String getDownloadUrl()
+    {
+        return downloadUrl;
+    }
+
+}

Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java Thu Oct  6 23:44:59 2005
@@ -17,9 +17,7 @@
  */
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
 
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -27,38 +25,44 @@
  * @version $Id$
  */
 public class ArtifactResolutionException
-    extends Exception
+    extends AbstractArtifactResolutionException
 {
-    private String groupId;
-
-    private String artifactId;
-
-    private String version;
-
-    private String type;
-
-    private String downloadUrl;
+    public ArtifactResolutionException( String message, String groupId, String artifactId, String version, String type,
+                                        List remoteRepositories, List path, Throwable t )
+    {
+        super( message, groupId, artifactId, version, type, remoteRepositories, path, t );
+    }
 
-    private List remoteRepositories;
+    public ArtifactResolutionException( String message, Artifact artifact )
+    {
+        super( message, artifact );
+    }
 
-    private final String originalMessage;
+    protected ArtifactResolutionException( String message, Artifact artifact, List remoteRepositories )
+    {
+        super( message, artifact, remoteRepositories );
+    }
 
-    private final String path;
+    protected ArtifactResolutionException( String message, Artifact artifact, List remoteRepositories, Throwable t )
+    {
+        super( message, artifact, remoteRepositories, t );
+    }
 
+/*
     public ArtifactResolutionException( String message, String groupId, String artifactId, String version, String type,
                                         List remoteRepositories, String downloadUrl, List path, Throwable t )
     {
         super( constructMessage( message, groupId, artifactId, version, type, remoteRepositories, downloadUrl, path ),
                t );
-        
+
         this.originalMessage = message;
         this.groupId = groupId;
         this.artifactId = artifactId;
         this.type = type;
         this.version = version;
         this.remoteRepositories = remoteRepositories;
-        this.downloadUrl = downloadUrl;
         this.path = constructArtifactPath( path );
+        this.downloadUrl = downloadUrl;
     }
 
     public ArtifactResolutionException( String message, String groupId, String artifactId, String version, String type,
@@ -81,93 +85,6 @@
         this.downloadUrl = downloadUrl;
         this.path = constructArtifactPath( path );
     }
-    
-    public String getOriginalMessage()
-    {
-        return originalMessage;
-    }
-
-    private static final String LS = System.getProperty( "line.separator" );
-
-    private static String constructArtifactPath( List path )
-    {
-        StringBuffer sb = new StringBuffer();
-        
-        if ( path != null )
-        {
-            sb.append( LS );
-            sb.append( "Path to dependency: " );
-            sb.append( LS );
-            int num = 1;
-            for ( Iterator i = path.iterator(); i.hasNext(); )
-            {
-                sb.append( "\t" );
-                sb.append( num++ );
-                sb.append( ") " );
-                sb.append( i.next() );
-                sb.append( LS );
-            }
-        }
-        
-        return sb.toString();
-    }
-
-    private static String constructMessage( String message, String groupId, String artifactId, String version,
-                                            String type, List remoteRepositories, String downloadUrl, List path )
-    {
-        StringBuffer sb = new StringBuffer();
-
-        sb.append( message );
-        sb.append( LS );
-        sb.append( "  " + groupId + ":" + artifactId + ":" + version + ":" + type );
-        sb.append( LS );
-        if ( remoteRepositories != null && !remoteRepositories.isEmpty() )
-        {
-            sb.append( LS );
-            sb.append( "from the specified remote repositories:" );
-            sb.append( LS + "  " );
-
-            for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
-            {
-                ArtifactRepository remoteRepository = (ArtifactRepository) i.next();
-
-                sb.append( remoteRepository.getId() );
-                sb.append( " (" );
-                sb.append( remoteRepository.getUrl() );
-                sb.append( ")" );
-                if ( i.hasNext() )
-                {
-                    sb.append( ",\n  " );
-                }
-            }
-        }
-
-        sb.append( constructArtifactPath( path ) );
-        sb.append( LS );
-
-        if ( downloadUrl != null && !type.equals( "pom" ) )
-        {
-            sb.append( LS );
-            sb.append( LS );
-            sb.append( "Try downloading the file manually from" );
-            sb.append( LS );
-            sb.append( "  " + downloadUrl );
-            sb.append( LS );
-            sb.append( "and install it using the command: " );
-            sb.append( LS );
-            sb.append( "  m2 install:install-file -DgroupId=" );
-            sb.append( groupId );
-            sb.append( " -DartifactId=" );
-            sb.append( artifactId );
-            sb.append( " -Dversion=" );
-            sb.append( version );
-            sb.append( " -Dpackaging=" );
-            sb.append( type );
-            sb.append( " -Dfile=/path/to/file" );
-        }
-
-        return sb.toString();
-    }
 
     public ArtifactResolutionException( String message, Artifact artifact, List remoteRepositories, Throwable t )
     {
@@ -190,44 +107,10 @@
     public ArtifactResolutionException( String message, Throwable cause )
     {
         super( message, cause );
-        
+
         this.originalMessage = message;
         this.path = "";
     }
 
-    public String getGroupId()
-    {
-        return groupId;
-    }
-
-    public String getArtifactId()
-    {
-        return artifactId;
-    }
-
-    public String getVersion()
-    {
-        return version;
-    }
-
-    public String getType()
-    {
-        return type;
-    }
-
-    public List getRemoteRepositories()
-    {
-        return remoteRepositories;
-    }
-
-    public String getDownloadUrl()
-    {
-        return downloadUrl;
-    }
-    
-    public String getArtifactPath()
-    {
-        return path;
-    }
-    
+*/
 }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java Thu Oct  6 23:44:59 2005
@@ -38,37 +38,37 @@
     String ROLE = ArtifactResolver.class.getName();
 
     void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
-        throws ArtifactResolutionException;
+        throws ArtifactResolutionException, ArtifactNotFoundException;
 
     ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, List remoteRepositories,
                                                   ArtifactRepository localRepository, ArtifactMetadataSource source )
-        throws ArtifactResolutionException;
+        throws ArtifactResolutionException, ArtifactNotFoundException;
 
     ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, List remoteRepositories,
                                                   ArtifactRepository localRepository, ArtifactMetadataSource source,
                                                   List listeners )
-        throws ArtifactResolutionException;
+        throws ArtifactResolutionException, ArtifactNotFoundException;
 
     ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact,
                                                   ArtifactRepository localRepository, List remoteRepositories,
                                                   ArtifactMetadataSource source, ArtifactFilter filter )
-        throws ArtifactResolutionException;
+        throws ArtifactResolutionException, ArtifactNotFoundException;
 
     ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, Map managedVersions,
                                                   ArtifactRepository localRepository, List remoteRepositories,
                                                   ArtifactMetadataSource source )
-        throws ArtifactResolutionException;
+        throws ArtifactResolutionException, ArtifactNotFoundException;
 
     ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, Map managedVersions,
                                                   ArtifactRepository localRepository, List remoteRepositories,
                                                   ArtifactMetadataSource source, ArtifactFilter filter )
-        throws ArtifactResolutionException;
+        throws ArtifactResolutionException, ArtifactNotFoundException;
 
     ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, Map managedVersions,
                                                   ArtifactRepository localRepository, List remoteRepositories,
                                                   ArtifactMetadataSource source, ArtifactFilter filter, List listeners )
-        throws ArtifactResolutionException;
+        throws ArtifactResolutionException, ArtifactNotFoundException;
 
     void resolveAlways( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
-        throws ArtifactResolutionException;
+        throws ArtifactResolutionException, ArtifactNotFoundException;
 }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java Thu Oct  6 23:44:59 2005
@@ -62,44 +62,37 @@
 
         ResolutionNode root = new ResolutionNode( originatingArtifact, remoteRepositories );
 
-        try
-        {
-            root.addDependencies( artifacts, remoteRepositories, filter );
+        root.addDependencies( artifacts, remoteRepositories, filter );
 
-            recurse( root, resolvedArtifacts, managedVersions, localRepository, remoteRepositories, source, filter,
-                     listeners );
+        recurse( root, resolvedArtifacts, managedVersions, localRepository, remoteRepositories, source, filter,
+                 listeners );
 
-            Set set = new HashSet();
+        Set set = new HashSet();
 
-            for ( Iterator i = resolvedArtifacts.values().iterator(); i.hasNext(); )
+        for ( Iterator i = resolvedArtifacts.values().iterator(); i.hasNext(); )
+        {
+            List nodes = (List) i.next();
+            for ( Iterator j = nodes.iterator(); j.hasNext(); )
             {
-                List nodes = (List) i.next();
-                for ( Iterator j = nodes.iterator(); j.hasNext(); )
+                ResolutionNode node = (ResolutionNode) j.next();
+                if ( !node.equals( root ) && node.isActive() )
                 {
-                    ResolutionNode node = (ResolutionNode) j.next();
-                    if ( !node.equals( root ) && node.isActive() )
-                    {
-                        Artifact artifact = node.getArtifact();
+                    Artifact artifact = node.getArtifact();
 
-                        // If it was optional, we don't add it or its children, just allow the update of the version and scope
-                        if ( !node.getArtifact().isOptional() )
-                        {
-                            artifact.setDependencyTrail( node.getDependencyTrail() );
+                    // If it was optional, we don't add it or its children, just allow the update of the version and scope
+                    if ( !node.getArtifact().isOptional() )
+                    {
+                        artifact.setDependencyTrail( node.getDependencyTrail() );
 
-                            set.add( node );
-                        }
+                        set.add( node );
                     }
                 }
             }
-
-            ArtifactResolutionResult result = new ArtifactResolutionResult();
-            result.setArtifactResolutionNodes( set );
-            return result;
-        }
-        catch ( OverConstrainedVersionException e )
-        {
-            throw new ArtifactResolutionException( "Unable to mediate dependency", e );
         }
+
+        ArtifactResolutionResult result = new ArtifactResolutionResult();
+        result.setArtifactResolutionNodes( set );
+        return result;
     }
 
     private void recurse( ResolutionNode node, Map resolvedArtifacts, Map managedVersions,
@@ -212,11 +205,9 @@
                         if ( artifact.getVersion() == null )
                         {
                             // set the recommended version
-                            VersionRange versionRange = artifact.getVersionRange();
-
                             // TODO: maybe its better to just pass the range through to retrieval and use a transformation?
                             ArtifactVersion version;
-                            if ( !versionRange.isSelectedVersionKnown() )
+                            if ( !artifact.isSelectedVersionKnown() )
                             {
                                 List versions = artifact.getAvailableVersions();
                                 if ( versions == null )
@@ -226,6 +217,7 @@
                                     artifact.setAvailableVersions( versions );
                                 }
 
+                                VersionRange versionRange = artifact.getVersionRange();
                                 version = versionRange.matchVersion( versions );
 
                                 if ( version == null )
@@ -234,18 +226,19 @@
                                     {
                                         throw new OverConstrainedVersionException(
                                             "No versions are present in the repository for the artifact with a range " +
-                                                versionRange );
+                                                versionRange, artifact, remoteRepositories );
                                     }
                                     else
                                     {
                                         throw new OverConstrainedVersionException( "Couldn't find a version in " +
-                                            versions + " to match range " + versionRange );
+                                            versions + " to match range " + versionRange, artifact,
+                                                                                          remoteRepositories );
                                     }
                                 }
                             }
                             else
                             {
-                                version = versionRange.getSelectedVersion();
+                                version = artifact.getSelectedVersion();
                             }
 
                             artifact.selectVersion( version.toString() );

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java Thu Oct  6 23:44:59 2005
@@ -116,7 +116,7 @@
             {
                 // set the recommended version
                 VersionRange versionRange = artifact.getVersionRange();
-                String version = versionRange.getSelectedVersion().toString();
+                String version = artifact.getSelectedVersion().toString();
                 artifact.selectVersion( version );
             }
 

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/TransitiveArtifactResolutionException.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/TransitiveArtifactResolutionException.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/TransitiveArtifactResolutionException.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/TransitiveArtifactResolutionException.java Thu Oct  6 23:44:59 2005
@@ -32,9 +32,4 @@
     {
         super( message, artifact, remoteRepositories, t );
     }
-
-    public TransitiveArtifactResolutionException( String message, Throwable cause )
-    {
-        super( message, cause );
-    }
 }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java Thu Oct  6 23:44:59 2005
@@ -1,5 +1,10 @@
 package org.apache.maven.artifact.versioning;
 
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+
+import java.util.List;
+
 /*
  * Copyright 2001-2005 The Apache Software Foundation.
  *
@@ -23,10 +28,16 @@
  * @version $Id$
  */
 public class OverConstrainedVersionException
-    extends Exception
+    extends ArtifactResolutionException
 {
-    public OverConstrainedVersionException( String msg )
+    public OverConstrainedVersionException( String msg, Artifact artifact )
+    {
+        super( msg, artifact );
+    }
+
+    public OverConstrainedVersionException( String msg, Artifact artifact, List remoteRepositories )
     {
-        super( msg );
+        super( msg, artifact, remoteRepositories );
     }
+
 }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java Thu Oct  6 23:44:59 2005
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 
+import org.apache.maven.artifact.Artifact;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
@@ -377,27 +379,7 @@
         return restrictions;
     }
 
-    private ArtifactVersion max( ArtifactVersion v1, ArtifactVersion v2 )
-    {
-        if ( v1 == null )
-        {
-            return v2;
-        }
-        if ( v2 == null )
-        {
-            return v1;
-        }
-        else if ( v1.compareTo( v2 ) > 0 )
-        {
-            return v1;
-        }
-        else
-        {
-            return v2;
-        }
-    }
-
-    public ArtifactVersion getSelectedVersion()
+    public ArtifactVersion getSelectedVersion( Artifact artifact )
         throws OverConstrainedVersionException
     {
         ArtifactVersion version;
@@ -409,7 +391,7 @@
         {
             if ( restrictions.size() == 0 )
             {
-                throw new OverConstrainedVersionException( "The artifact has no valid ranges" );
+                throw new OverConstrainedVersionException( "The artifact has no valid ranges", artifact );
             }
             else
             {
@@ -425,7 +407,7 @@
         return version;
     }
 
-    public boolean isSelectedVersionKnown()
+    public boolean isSelectedVersionKnown( Artifact artifact )
         throws OverConstrainedVersionException
     {
         boolean value = false;
@@ -437,7 +419,7 @@
         {
             if ( restrictions.size() == 0 )
             {
-                throw new OverConstrainedVersionException( "The artifact has no valid ranges" );
+                throw new OverConstrainedVersionException( "The artifact has no valid ranges", artifact );
             }
             else
             {

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java Thu Oct  6 23:44:59 2005
@@ -18,6 +18,7 @@
 
 import org.apache.maven.artifact.manager.WagonManager;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.apache.maven.execution.MavenExecutionRequest;
@@ -255,7 +256,7 @@
                             logError( response );
                         }
                     }
-                    else if ( exception instanceof ArtifactResolutionException )
+                    else if ( exception instanceof ArtifactNotFoundException )
                     {
                         logFailure( response, exception, null );
                     }
@@ -487,13 +488,8 @@
 
     protected MavenSession createSession( MavenExecutionRequest request, ReactorManager rpm )
     {
-        return new MavenSession( container,
-                                 request.getSettings(),
-                                 request.getLocalRepository(),
-                                 request.getEventDispatcher(),
-                                 rpm,
-                                 request.getGoals(),
-                                 request.getBaseDirectory(),
+        return new MavenSession( container, request.getSettings(), request.getLocalRepository(),
+                                 request.getEventDispatcher(), rpm, request.getGoals(), request.getBaseDirectory(),
                                  request.getExecutionProperties() );
     }
 

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java Thu Oct  6 23:44:59 2005
@@ -20,6 +20,7 @@
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -52,10 +53,11 @@
     private PlexusContainer container;
 
     public void addExtension( Extension extension, MavenProject project, ArtifactRepository localRepository )
-        throws ArtifactResolutionException, PlexusContainerException, InvalidVersionSpecificationException
+        throws ArtifactResolutionException, PlexusContainerException, InvalidVersionSpecificationException,
+        ArtifactNotFoundException
     {
         String extensionId = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() );
-        
+
         Artifact artifact = (Artifact) project.getExtensionArtifactMap().get( extensionId );
 
         if ( artifact != null )

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java Thu Oct  6 23:44:59 2005
@@ -17,6 +17,7 @@
  */
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.model.Extension;
@@ -32,5 +33,6 @@
 public interface ExtensionManager
 {
     void addExtension( Extension extension, MavenProject project, ArtifactRepository localRepository )
-        throws ArtifactResolutionException, PlexusContainerException, InvalidVersionSpecificationException;
+        throws ArtifactResolutionException, PlexusContainerException, InvalidVersionSpecificationException,
+        ArtifactNotFoundException;
 }

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Thu Oct  6 23:44:59 2005
@@ -19,6 +19,7 @@
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.execution.MavenExecutionResponse;
@@ -38,7 +39,6 @@
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.PluginManager;
 import org.apache.maven.plugin.PluginManagerException;
-import org.apache.maven.plugin.PluginNotFoundException;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.plugin.lifecycle.Execution;
@@ -157,6 +157,10 @@
         {
             response.setException( e );
         }
+        catch ( ArtifactNotFoundException e )
+        {
+            response.setException( e );
+        }
         catch ( ArtifactResolutionException e )
         {
             response.setException( e );
@@ -196,8 +200,7 @@
     private void executeTaskSegments( List taskSegments, ReactorManager rm, MavenSession session,
                                       MavenProject rootProject, EventDispatcher dispatcher,
                                       MavenExecutionResponse response )
-        throws PluginNotFoundException, MojoExecutionException, ArtifactResolutionException,
-        LifecycleExecutionException, MojoFailureException
+        throws ArtifactNotFoundException, MojoExecutionException, LifecycleExecutionException, MojoFailureException
     {
         for ( Iterator it = taskSegments.iterator(); it.hasNext(); )
         {
@@ -234,16 +237,22 @@
                             }
                             catch ( MojoExecutionException e )
                             {
+                                // TODO: should this be removed?
                                 handleExecutionFailure( rm, rootProject, e, task );
                             }
                             catch ( ArtifactResolutionException e )
                             {
+                                // TODO: should this be removed?
                                 handleExecutionFailure( rm, rootProject, e, task );
                             }
                             catch ( MojoFailureException e )
                             {
                                 handleExecutionFailure( rm, rootProject, e, task );
                             }
+                            catch ( ArtifactNotFoundException e )
+                            {
+                                handleExecutionFailure( rm, rootProject, e, task );
+                            }
                         }
 
                         dispatcher.dispatchEnd( event, rootProject.getId() + " ( " + segment + " )" );
@@ -308,16 +317,22 @@
                                 }
                                 catch ( MojoExecutionException e )
                                 {
+                                    // TODO: should this be removed?
                                     handleExecutionFailure( rm, currentProject, e, task );
                                 }
                                 catch ( ArtifactResolutionException e )
                                 {
+                                    // TODO: should this be removed?
                                     handleExecutionFailure( rm, currentProject, e, task );
                                 }
                                 catch ( MojoFailureException e )
                                 {
                                     handleExecutionFailure( rm, currentProject, e, task );
                                 }
+                                catch ( ArtifactNotFoundException e )
+                                {
+                                    handleExecutionFailure( rm, currentProject, e, task );
+                                }
                             }
 
                             dispatcher.dispatchEnd( event, currentProject.getId() + " ( " + segment + " )" );
@@ -348,7 +363,7 @@
     }
 
     private void handleExecutionFailure( ReactorManager rm, MavenProject project, Exception e, String task )
-        throws MojoExecutionException, ArtifactResolutionException, MojoFailureException
+        throws MojoExecutionException, MojoFailureException, ArtifactNotFoundException
     {
         if ( ReactorManager.FAIL_FAST.equals( rm.getFailureBehavior() ) )
         {
@@ -362,9 +377,9 @@
             {
                 throw (MojoFailureException) e;
             }
-            else if ( e instanceof ArtifactResolutionException )
+            else if ( e instanceof ArtifactNotFoundException )
             {
-                throw (ArtifactResolutionException) e;
+                throw (ArtifactNotFoundException) e;
             }
             else
             {
@@ -383,6 +398,7 @@
     }
 
     private List segmentTaskListByAggregationNeeds( List tasks, MavenSession session, MavenProject project )
+        throws LifecycleExecutionException
     {
         List segments = new ArrayList();
 
@@ -419,13 +435,13 @@
                         // definitely a CLI goal, can use prefix
                         mojo = getMojoDescriptor( task, session, project, task, true );
                     }
-                    catch ( LifecycleExecutionException e )
+                    catch ( ArtifactResolutionException e )
                     {
                         getLogger().info(
                             "Cannot find mojo descriptor for: \'" + task + "\' - Treating as non-aggregator." );
                         getLogger().debug( "", e );
                     }
-                    catch ( ArtifactResolutionException e )
+                    catch ( ArtifactNotFoundException e )
                     {
                         getLogger().info(
                             "Cannot find mojo descriptor for: \'" + task + "\' - Treating as non-aggregator." );
@@ -484,7 +500,7 @@
     }
 
     private void executeGoal( String task, MavenSession session, MavenProject project, MavenExecutionResponse response )
-        throws LifecycleExecutionException, PluginNotFoundException, MojoExecutionException,
+        throws LifecycleExecutionException, ArtifactNotFoundException, MojoExecutionException,
         ArtifactResolutionException, MojoFailureException
     {
         if ( phases.contains( task ) )
@@ -501,7 +517,8 @@
 
     private void executeGoalWithLifecycle( String task, MavenSession session, Map lifecycleMappings,
                                            MavenProject project, MavenExecutionResponse response )
-        throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException
+        throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException,
+        ArtifactNotFoundException
     {
         List goals = processGoalChain( task, lifecycleMappings );
 
@@ -510,7 +527,8 @@
 
     private void executeStandaloneGoal( String task, MavenSession session, MavenProject project,
                                         MavenExecutionResponse response )
-        throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException
+        throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException,
+        ArtifactNotFoundException
     {
         // guaranteed to come from the CLI and not be part of a phase
         MojoDescriptor mojoDescriptor = getMojoDescriptor( task, session, project, task, true );
@@ -518,7 +536,8 @@
     }
 
     private void executeGoals( List goals, MavenSession session, MavenProject project, MavenExecutionResponse response )
-        throws LifecycleExecutionException, MojoExecutionException, ArtifactResolutionException, MojoFailureException
+        throws LifecycleExecutionException, MojoExecutionException, ArtifactResolutionException, MojoFailureException,
+        ArtifactNotFoundException
     {
         for ( Iterator i = goals.iterator(); i.hasNext(); )
         {
@@ -561,7 +580,7 @@
     }
 
     private List getReports( MavenProject project, MojoExecution mojoExecution, MavenSession session )
-        throws ArtifactResolutionException, LifecycleExecutionException
+        throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException
     {
         List reportPlugins = project.getReportPlugins();
 
@@ -658,7 +677,8 @@
 
     private List getReports( ReportPlugin reportPlugin, ReportSet reportSet, MavenProject project, MavenSession session,
                              MojoExecution mojoExecution )
-        throws PluginManagerException, PluginVersionResolutionException, ArtifactResolutionException
+        throws PluginManagerException, PluginVersionResolutionException, ArtifactResolutionException,
+        ArtifactNotFoundException
     {
         PluginDescriptor pluginDescriptor = pluginManager.verifyReportPlugin( reportPlugin, project, session );
 
@@ -694,7 +714,8 @@
 
     private void forkLifecycle( MojoDescriptor mojoDescriptor, MavenSession session, MavenProject project,
                                 MavenExecutionResponse response )
-        throws LifecycleExecutionException, MojoExecutionException, ArtifactResolutionException, MojoFailureException
+        throws LifecycleExecutionException, MojoExecutionException, ArtifactResolutionException, MojoFailureException,
+        ArtifactNotFoundException
     {
         PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
         getLogger().info( "Preparing " + pluginDescriptor.getGoalPrefix() + ":" + mojoDescriptor.getGoal() );
@@ -724,7 +745,8 @@
 
     private void forkProjectLifecycle( MojoDescriptor mojoDescriptor, MavenSession session, MavenProject project,
                                        MavenExecutionResponse response )
-        throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException
+        throws ArtifactResolutionException, LifecycleExecutionException, MojoExecutionException, MojoFailureException,
+        ArtifactNotFoundException
     {
         PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
 
@@ -841,7 +863,7 @@
     }
 
     private Map constructLifecycleMappings( MavenSession session, String selectedPhase, MavenProject project )
-        throws ArtifactResolutionException, LifecycleExecutionException
+        throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException
     {
         // first, bind those associated with the packaging
         Map lifecycleMappings = bindLifecycleForPackaging( session, selectedPhase, project );
@@ -858,7 +880,7 @@
     }
 
     private Map bindLifecycleForPackaging( MavenSession session, String selectedPhase, MavenProject project )
-        throws ArtifactResolutionException, LifecycleExecutionException
+        throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException
     {
         Map mappings = findMappingsForLifecycle( session, project );
 
@@ -901,7 +923,7 @@
     }
 
     private Map findMappingsForLifecycle( MavenSession session, MavenProject project )
-        throws ArtifactResolutionException, LifecycleExecutionException
+        throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException
     {
         String packaging = project.getPackaging();
         LifecycleMapping m;
@@ -940,7 +962,8 @@
 
     private Object findExtension( MavenProject project, String role, String roleHint, Settings settings,
                                   ArtifactRepository localRepository )
-        throws ArtifactResolutionException, PluginManagerException, PluginVersionResolutionException
+        throws ArtifactResolutionException, PluginManagerException, PluginVersionResolutionException,
+        ArtifactNotFoundException
     {
         for ( Iterator i = project.getBuildPlugins().iterator(); i.hasNext(); )
         {
@@ -969,7 +992,8 @@
      * lookup directly, or have them passed in
      */
     private Map findArtifactTypeHandlers( MavenProject project, Settings settings, ArtifactRepository localRepository )
-        throws ArtifactResolutionException, PluginManagerException, PluginVersionResolutionException
+        throws ArtifactResolutionException, PluginManagerException, PluginVersionResolutionException,
+        ArtifactNotFoundException
     {
         Map map = new HashMap();
         for ( Iterator i = project.getBuildPlugins().iterator(); i.hasNext(); )
@@ -1014,7 +1038,7 @@
      * @param session
      */
     private void bindPluginToLifecycle( Plugin plugin, MavenSession session, Map phaseMap, MavenProject project )
-        throws LifecycleExecutionException, ArtifactResolutionException
+        throws LifecycleExecutionException, ArtifactResolutionException, ArtifactNotFoundException
     {
         PluginDescriptor pluginDescriptor;
         Settings settings = session.getSettings();
@@ -1048,7 +1072,7 @@
     }
 
     private PluginDescriptor verifyPlugin( Plugin plugin, MavenSession session, MavenProject project )
-        throws ArtifactResolutionException, LifecycleExecutionException
+        throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException
     {
         PluginDescriptor pluginDescriptor;
         try
@@ -1154,7 +1178,7 @@
 
     private MojoDescriptor getMojoDescriptor( String task, MavenSession session, MavenProject project,
                                               String invokedVia, boolean canUsePrefix )
-        throws ArtifactResolutionException, LifecycleExecutionException
+        throws ArtifactResolutionException, LifecycleExecutionException, ArtifactNotFoundException
     {
         String goal;
         Plugin plugin = null;

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=307034&r1=307033&r2=307034&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Thu Oct  6 23:44:59 2005
@@ -22,6 +22,7 @@
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.metadata.ResolutionGroup;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -74,7 +75,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.lang.reflect.Field;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -147,7 +147,8 @@
 
     public PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
                                           ArtifactRepository localRepository )
-        throws ArtifactResolutionException, PluginManagerException, PluginVersionResolutionException
+        throws ArtifactResolutionException, PluginManagerException, PluginVersionResolutionException,
+        ArtifactNotFoundException
     {
         // TODO: this should be possibly outside
         // All version-resolution logic has been moved to DefaultPluginVersionManager.
@@ -163,7 +164,8 @@
 
     private PluginDescriptor verifyVersionedPlugin( Plugin plugin, MavenProject project,
                                                     ArtifactRepository localRepository )
-        throws PluginVersionResolutionException, PluginManagerException, ArtifactResolutionException
+        throws PluginVersionResolutionException, PluginManagerException, ArtifactNotFoundException,
+        ArtifactResolutionException
     {
         // TODO: this might result in an artifact "RELEASE" being resolved continuously
         // FIXME: need to find out how a plugin gets marked as 'installed'
@@ -187,7 +189,7 @@
 
                 project.addPlugin( plugin );
             }
-            catch ( ArtifactResolutionException e )
+            catch ( ArtifactNotFoundException e )
             {
                 String groupId = plugin.getGroupId();
                 String artifactId = plugin.getArtifactId();
@@ -255,7 +257,7 @@
 
     protected void addPlugin( Plugin plugin, Artifact pluginArtifact, MavenProject project,
                               ArtifactRepository localRepository )
-        throws ArtifactResolutionException, PluginManagerException
+        throws ArtifactResolutionException, PluginManagerException, ArtifactNotFoundException
     {
         // TODO: share with MMS? Not sure if it belongs here
         if ( project.getProjectReferences() != null && !project.getProjectReferences().isEmpty() )
@@ -330,7 +332,8 @@
     // ----------------------------------------------------------------------
 
     public void executeMojo( MavenProject project, MojoExecution mojoExecution, MavenSession session )
-        throws ArtifactResolutionException, PluginManagerException, MojoExecutionException, MojoFailureException
+        throws ArtifactResolutionException, PluginManagerException, MojoExecutionException, MojoFailureException,
+        ArtifactNotFoundException
     {
         MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
 
@@ -461,7 +464,7 @@
     }
 
     public MavenReport getReport( MavenProject project, MojoExecution mojoExecution, MavenSession session )
-        throws PluginManagerException
+        throws PluginManagerException, ArtifactNotFoundException
     {
         MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
         PluginDescriptor descriptor = mojoDescriptor.getPluginDescriptor();
@@ -489,7 +492,8 @@
     }
 
     public PluginDescriptor verifyReportPlugin( ReportPlugin reportPlugin, MavenProject project, MavenSession session )
-        throws PluginVersionResolutionException, ArtifactResolutionException, PluginManagerException
+        throws PluginVersionResolutionException, ArtifactResolutionException, PluginManagerException,
+        ArtifactNotFoundException
     {
         String version = reportPlugin.getVersion();
 
@@ -527,7 +531,7 @@
 
     private Mojo getConfiguredMojo( MavenSession session, Xpp3Dom dom, MavenProject project, boolean report,
                                     MojoExecution mojoExecution )
-        throws ComponentLookupException, PluginConfigurationException, PluginManagerException
+        throws ComponentLookupException, PluginConfigurationException, PluginManagerException, ArtifactNotFoundException
     {
         MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
 
@@ -593,7 +597,7 @@
 
     private void ensurePluginContainerIsComplete( PluginDescriptor pluginDescriptor, PlexusContainer pluginContainer,
                                                   MavenProject project, MavenSession session )
-        throws PluginConfigurationException
+        throws PluginConfigurationException, ArtifactNotFoundException
     {
         // if the plugin's already been used once, don't re-do this step...
         // otherwise, we have to finish resolving the plugin's classpath and start the container.
@@ -662,7 +666,7 @@
 
     private void resolveCoreArtifacts( List unresolved, ArtifactRepository localRepository,
                                        List resolutionRepositories )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         for ( Iterator it = unresolved.iterator(); it.hasNext(); )
         {
@@ -1152,7 +1156,7 @@
 
     private void resolveTransitiveDependencies( MavenSession context, ArtifactResolver artifactResolver, String scope,
                                                 ArtifactFactory artifactFactory, MavenProject project )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         ArtifactFilter filter = new ScopeArtifactFilter( scope );
 
@@ -1172,7 +1176,8 @@
         }
         catch ( InvalidVersionSpecificationException e )
         {
-            throw new ArtifactResolutionException( "Error in dependency version", e );
+            // TODO: should that exception be derived from ArtifactResolutionException instead?
+            throw new ArtifactResolutionException( e.getMessage(), artifact );
         }
         ArtifactResolutionResult result = artifactResolver.resolveTransitively( project.getDependencyArtifacts(),
                                                                                 artifact, context.getLocalRepository(),
@@ -1187,7 +1192,7 @@
     // ----------------------------------------------------------------------
 
     private void downloadDependencies( MavenProject project, MavenSession context, ArtifactResolver artifactResolver )
-        throws ArtifactResolutionException
+        throws ArtifactResolutionException, ArtifactNotFoundException
     {
         ArtifactRepository localRepository = context.getLocalRepository();
         List remoteArtifactRepositories = project.getRemoteArtifactRepositories();