Author: bentmann
Date: Thu Aug 27 12:17:46 2009
New Revision: 808394

URL: http://svn.apache.org/viewvc?rev=808394&view=rev
Log:
[MNG-3260] 2.1: aggregating plugins in submodules of the reactor return all 
projects causing a chicken/egg issue

Modified:
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java?rev=808394&r1=808393&r2=808394&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
 Thu Aug 27 12:17:46 2009
@@ -103,7 +103,6 @@
         // FIXME setTransferListener
         
         ArtifactResolutionResult result = repositorySystem.resolve( request ); 
               
-        resolutionErrorHandler.throwErrors( request, result );
 
         project.setArtifacts( result.getArtifacts() );
 
@@ -123,6 +122,8 @@
         }
         project.setDependencyArtifacts( dependencyArtifacts );
 
+        resolutionErrorHandler.throwErrors( request, result );
+
         return result.getArtifacts();
     }
 

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=808394&r1=808393&r2=808394&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 Aug 27 12:17:46 2009
@@ -31,8 +31,11 @@
 import java.util.TreeSet;
 
 import org.apache.maven.ProjectDependenciesResolver;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
 import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException;
 import org.apache.maven.execution.BuildFailure;
 import org.apache.maven.execution.BuildSuccess;
 import org.apache.maven.execution.DefaultLifecycleEvent;
@@ -304,8 +307,36 @@
                 for ( MavenProject project : projectsToResolve )
                 {
                     repositoryRequest.setRemoteRepositories( 
project.getRemoteArtifactRepositories() );
-                    projectDependenciesResolver.resolve( project, 
executionPlan.getRequiredResolutionScopes(),
-                                                         repositoryRequest );
+
+                    try
+                    {
+                        projectDependenciesResolver.resolve( project, 
executionPlan.getRequiredResolutionScopes(),
+                                                             repositoryRequest 
);
+                    }
+                    catch ( MultipleArtifactsNotFoundException e )
+                    {
+                        /*
+                         * MNG-2277, the check below compensates for our bad 
plugin support where we ended up with
+                         * aggregator plugins that require dependency 
resolution although they usually run in phases of
+                         * the build where project artifacts haven't been 
assembled yet. The prime example of this is
+                         * "mvn release:prepare".
+                         */
+                        if ( projectBuild.taskSegment.aggregating
+                            && areAllArtifactsInReactor( 
session.getProjects(), e.getMissingArtifacts() ) )
+                        {
+                            logger.warn( "The following artifacts could not be 
resolved at this point of the build"
+                                + " but seem to be part of the reactor:" );
+                            for ( Artifact artifact : e.getMissingArtifacts() )
+                            {
+                                logger.warn( "o " + artifact.getId() );
+                            }
+                            logger.warn( "Try running the build up to the 
lifecycle phase \"package\"" );
+                        }
+                        else
+                        {
+                            throw e;
+                        }
+                    }
                 }
 
                 for ( MojoExecution mojoExecution : 
executionPlan.getExecutions() )
@@ -360,6 +391,27 @@
         fireEvent( session, null, LifecycleEventCatapult.SESSION_ENDED );
     }
 
+    private boolean areAllArtifactsInReactor( Collection<MavenProject> 
projects, Collection<Artifact> artifacts )
+    {
+        Set<String> projectKeys = new HashSet<String>( projects.size() * 2 );
+        for ( MavenProject project : projects )
+        {
+            String key = ArtifactUtils.key( project.getGroupId(), 
project.getArtifactId(), project.getVersion() );
+            projectKeys.add( key );
+        }
+
+        for ( Artifact artifact : artifacts )
+        {
+            String key = ArtifactUtils.key( artifact );
+            if ( !projectKeys.contains( key ) )
+            {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
     private void execute( MavenSession session, MojoExecution mojoExecution, 
ProjectIndex projectIndex )
         throws MojoFailureException, MojoExecutionException, 
PluginConfigurationException, PluginManagerException
     {


Reply via email to