You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/09/21 14:57:44 UTC
svn commit: r817233 - in
/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven:
DefaultProjectDependenciesResolver.java
lifecycle/DefaultLifecycleExecutor.java lifecycle/LifecycleExecutor.java
Author: bentmann
Date: Mon Sep 21 12:57:43 2009
New Revision: 817233
URL: http://svn.apache.org/viewvc?rev=817233&view=rev
Log:
[MNG-4363] [regression] Dependency artifacts injected by plugins aren't included in class paths
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java?rev=817233&r1=817232&r2=817233&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java Mon Sep 21 12:57:43 2009
@@ -142,6 +142,7 @@
for ( MavenProject project : projects )
{
request.setArtifact( new ProjectArtifact( project ) );
+ request.setArtifactDependencies( project.getDependencyArtifacts() );
request.setManagedVersionMap( project.getManagedVersionMap() );
request.setRemoteRepositories( project.getRemoteArtifactRepositories() );
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=817233&r1=817232&r2=817233&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Mon Sep 21 12:57:43 2009
@@ -309,12 +309,17 @@
for ( MavenProject project : projectsToResolve )
{
- resolveProjectDependencies( project, executionPlan, session, projectBuild.taskSegment.aggregating );
+ resolveProjectDependencies( project, executionPlan.getRequiredCollectionScopes(),
+ executionPlan.getRequiredResolutionScopes(), session,
+ projectBuild.taskSegment.aggregating );
}
+ DependencyContext dependencyContext =
+ new DependencyContext( executionPlan, projectBuild.taskSegment.aggregating );
+
for ( MojoExecution mojoExecution : executionPlan.getExecutions() )
{
- execute( session, mojoExecution, projectIndex );
+ execute( session, mojoExecution, projectIndex, dependencyContext );
}
long buildEndTime = System.currentTimeMillis();
@@ -364,18 +369,15 @@
fireEvent( session, null, LifecycleEventCatapult.SESSION_ENDED );
}
- private void resolveProjectDependencies( MavenProject project, MavenExecutionPlan executionPlan,
- MavenSession session, boolean aggregating )
+ private void resolveProjectDependencies( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session,
+ boolean aggregating )
throws ArtifactResolutionException, ArtifactNotFoundException
{
Set<Artifact> artifacts;
try
{
- Collection<String> scopesToResolve = executionPlan.getRequiredResolutionScopes();
-
- Collection<String> scopesToCollect = executionPlan.getRequiredCollectionScopes();
-
artifacts = projectDependenciesResolver.resolve( project, scopesToCollect, scopesToResolve, session );
}
catch ( MultipleArtifactsNotFoundException e )
@@ -407,21 +409,24 @@
project.setArtifacts( artifacts );
- Set<String> directDependencies = new HashSet<String>( project.getDependencies().size() * 2 );
- for ( Dependency dependency : project.getDependencies() )
+ if ( project.getDependencyArtifacts() == null )
{
- directDependencies.add( dependency.getManagementKey() );
- }
+ Set<String> directDependencies = new HashSet<String>( project.getDependencies().size() * 2 );
+ for ( Dependency dependency : project.getDependencies() )
+ {
+ directDependencies.add( dependency.getManagementKey() );
+ }
- Set<Artifact> dependencyArtifacts = new LinkedHashSet<Artifact>( project.getDependencies().size() * 2 );
- for ( Artifact artifact : artifacts )
- {
- if ( directDependencies.contains( artifact.getDependencyConflictId() ) )
+ Set<Artifact> dependencyArtifacts = new LinkedHashSet<Artifact>( project.getDependencies().size() * 2 );
+ for ( Artifact artifact : artifacts )
{
- dependencyArtifacts.add( artifact );
+ if ( directDependencies.contains( artifact.getDependencyConflictId() ) )
+ {
+ dependencyArtifacts.add( artifact );
+ }
}
+ project.setDependencyArtifacts( dependencyArtifacts );
}
- project.setDependencyArtifacts( dependencyArtifacts );
}
private boolean areAllArtifactsInReactor( Collection<MavenProject> projects, Collection<Artifact> artifacts )
@@ -445,8 +450,72 @@
return true;
}
- private void execute( MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex )
- throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException
+ private class DependencyContext
+ {
+
+ private final Collection<String> scopesToCollect;
+
+ private final Collection<String> scopesToResolve;
+
+ private final boolean aggregating;
+
+ private MavenProject lastProject;
+
+ private Collection<?> lastDependencyArtifacts;
+
+ private int lastDependencyArtifactCount;
+
+ DependencyContext( Collection<String> scopesToCollect, Collection<String> scopesToResolve, boolean aggregating )
+ {
+ this.scopesToCollect = scopesToCollect;
+ this.scopesToResolve = scopesToResolve;
+ this.aggregating = aggregating;
+ }
+
+ DependencyContext( MavenExecutionPlan executionPlan, boolean aggregating )
+ {
+ this.scopesToCollect = executionPlan.getRequiredCollectionScopes();
+ this.scopesToResolve = executionPlan.getRequiredResolutionScopes();
+ this.aggregating = aggregating;
+ }
+
+ DependencyContext( MojoExecution mojoExecution )
+ {
+ this.scopesToCollect = new TreeSet<String>();
+ this.scopesToResolve = new TreeSet<String>();
+ collectDependencyRequirements( scopesToResolve, scopesToCollect, mojoExecution );
+ this.aggregating = mojoExecution.getMojoDescriptor().isAggregating();
+ }
+
+ public DependencyContext clone()
+ {
+ return new DependencyContext( scopesToCollect, scopesToResolve, aggregating );
+ }
+
+ void checkForUpdate( MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ if ( lastProject == session.getCurrentProject() )
+ {
+ if ( lastDependencyArtifacts != lastProject.getDependencyArtifacts()
+ || ( lastDependencyArtifacts != null && lastDependencyArtifactCount != lastDependencyArtifacts.size() ) )
+ {
+ logger.debug( "Re-resolving dependencies for project " + lastProject.getId()
+ + " to account for updates by previous goal execution" );
+ resolveProjectDependencies( lastProject, scopesToCollect, scopesToResolve, session, aggregating );
+ }
+ }
+
+ lastProject = session.getCurrentProject();
+ lastDependencyArtifacts = lastProject.getDependencyArtifacts();
+ lastDependencyArtifactCount = ( lastDependencyArtifacts != null ) ? lastDependencyArtifacts.size() : 0;
+ }
+ }
+
+ private void execute( MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex,
+ DependencyContext dependencyContext )
+ throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException,
+ ArtifactResolutionException, ArtifactNotFoundException
{
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
@@ -471,7 +540,10 @@
}
}
- List<MavenProject> forkedProjects = executeForkedExecutions( mojoExecution, session, projectIndex );
+ dependencyContext.checkForUpdate( session );
+
+ List<MavenProject> forkedProjects =
+ executeForkedExecutions( mojoExecution, session, projectIndex, dependencyContext );
fireEvent( session, mojoExecution, LifecycleEventCatapult.MOJO_STARTED );
@@ -515,14 +587,17 @@
}
public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session )
- throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException
+ throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException,
+ ArtifactResolutionException, ArtifactNotFoundException
{
- return executeForkedExecutions( mojoExecution, session, new ProjectIndex( session.getProjects() ) );
+ return executeForkedExecutions( mojoExecution, session, new ProjectIndex( session.getProjects() ),
+ new DependencyContext( mojoExecution ) );
}
private List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session,
- ProjectIndex projectIndex )
- throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException
+ ProjectIndex projectIndex, DependencyContext dependencyContext )
+ throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException,
+ ArtifactResolutionException, ArtifactNotFoundException
{
List<MavenProject> forkedProjects = Collections.emptyList();
@@ -536,6 +611,8 @@
forkedProjects = new ArrayList<MavenProject>( forkedExecutions.size() );
+ dependencyContext = dependencyContext.clone();
+
try
{
for ( Map.Entry<String, List<MojoExecution>> fork : forkedExecutions.entrySet() )
@@ -558,7 +635,7 @@
for ( MojoExecution forkedExecution : fork.getValue() )
{
- execute( session, forkedExecution, projectIndex );
+ execute( session, forkedExecution, projectIndex, dependencyContext );
}
}
finally
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java?rev=817233&r1=817232&r2=817233&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java Mon Sep 21 12:57:43 2009
@@ -22,6 +22,8 @@
import java.util.List;
import java.util.Set;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.InvalidPluginDescriptorException;
@@ -107,6 +109,7 @@
* will never be {@code null}.
*/
List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session )
- throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException;
+ throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException,
+ ArtifactResolutionException, ArtifactNotFoundException;
}