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 {