Author: krosenvold
Date: Thu Apr 8 11:29:07 2010
New Revision: 931884
URL: http://svn.apache.org/viewvc?rev=931884&view=rev
Log:
[MNG-3004] Concurrent building of multimodule projects
This commit consists of a modularization of the DefaultLifecycleExecutor into
smaller
components. This is primarily done with the intention of extracting execution
strategy
somewhat from the rest of the logic.
It also contains three differenent execution strategies:
A) Linear ("Classic")
B) Parallel (Based on Dan's original implemementation)
C) Weave (Still experimental)
The command line -T option activates parallel running, and the argument
is in the form -T <[nThreads, a float][C][W]|auto>
Notes:
* The output demultiplexer is disabled in this commit, and output will appear
intermingled.
* The modello plugin has known problems
* Surefire must be run in forkmode at least once.
Added:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/Schedule.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/Scheduling.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuilderCommon.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuiltLogItem.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ConcurrencyDependencyGraph.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ConcurrentBuildLogger.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorImpl.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginAnalyzerImpl.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculatorImpl.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleThreadedBuilder.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorBuildStatus.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ThreadConfigurationService.java
(with props)
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ThreadOutputMuxer.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuildListCalculatorTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ConcurrencyDependencyGraphTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilderTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ThreadConfigurationServiceTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ThreadOutputMuxerTest.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/BuildPluginManagerStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/CompletionServiceStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/DefaultLifecyclesStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LoggerStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginPrefixResolverStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginVersionResolverStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependenciesResolverStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
(with props)
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStubTest.java
(with props)
Modified:
maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.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/Lifecycle.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleEventCatapult.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java
maven/maven-3/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
maven/maven-3/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
maven/maven-3/trunk/maven-embedder/src/main/java/org/apache/maven/cli/ExecutionEventLogger.java
maven/maven-3/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
Modified:
maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java?rev=931884&r1=931883&r2=931884&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
(original)
+++
maven/maven-3/trunk/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
Thu Apr 8 11:29:07 2010
@@ -25,11 +25,8 @@ import java.util.List;
import java.util.Set;
import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.*;
import org.apache.maven.lifecycle.LifecycleExecutionException;
-import org.apache.maven.lifecycle.LifecycleExecutor;
-import org.apache.maven.lifecycle.LifecycleNotFoundException;
-import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
-import org.apache.maven.lifecycle.MavenExecutionPlan;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginExecution;
import org.apache.maven.plugin.InvalidPluginDescriptorException;
@@ -55,7 +52,7 @@ public class EmptyLifecycleExecutor
throws PluginNotFoundException, PluginResolutionException,
PluginDescriptorParsingException,
MojoNotFoundException
{
- return new MavenExecutionPlan( Collections.<MojoExecution>
emptyList(), null, null );
+ return new MavenExecutionPlan(null, null, null );
}
public void execute( MavenSession session )
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=931884&r1=931883&r2=931884&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
Thu Apr 8 11:29:07 2010
@@ -40,6 +40,7 @@ import org.apache.maven.execution.MavenE
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.ProjectDependencyGraph;
import org.apache.maven.lifecycle.LifecycleExecutor;
+import org.apache.maven.lifecycle.internal.LifecycleWeaveBuilder;
import org.apache.maven.model.building.ModelProblem;
import org.apache.maven.model.building.ModelSource;
import org.apache.maven.model.building.UrlModelSource;
@@ -191,7 +192,8 @@ public class DefaultMaven
// Reactor
// Workspace
// User Local Repository
- delegatingLocalArtifactRepository.setBuildReactor( new
ReactorArtifactRepository( projectMap, session ) );
+ final boolean isWeaveMode = LifecycleWeaveBuilder.isWeaveMode(
request);
+ delegatingLocalArtifactRepository.setBuildReactor( new
ReactorArtifactRepository( projectMap, isWeaveMode ) );
}
catch ( org.apache.maven.DuplicateProjectException e )
{
@@ -245,7 +247,7 @@ public class DefaultMaven
}
result.setTopologicallySortedProjects( session.getProjects() );
-
+
if ( result.hasExceptions() )
{
return result;
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java?rev=931884&r1=931883&r2=931884&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java
Thu Apr 8 11:29:07 2010
@@ -1,19 +1,13 @@
package org.apache.maven;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
-import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
import org.apache.maven.repository.LocalArtifactRepository;
+import java.io.File;
+import java.util.*;
+
/**
* An implementation of a repository that knows how to search the Maven
reactor for artifacts.
*
@@ -27,11 +21,15 @@ public class ReactorArtifactRepository
private Map<String, List<String>> availableVersions;
+ private final boolean isWeaveMode;
+
private final int hashCode;
- public ReactorArtifactRepository( Map<String, MavenProject>
reactorProjects, MavenSession session )
+ @SuppressWarnings({"ConstantConditions"})
+ public ReactorArtifactRepository( Map<String, MavenProject>
reactorProjects, boolean isWeaveMode )
{
this.reactorProjects = reactorProjects;
+ this.isWeaveMode = isWeaveMode;
hashCode = ( reactorProjects != null ) ?
reactorProjects.keySet().hashCode() : 0;
availableVersions = new HashMap<String, List<String>>(
reactorProjects.size() * 2 );
@@ -70,7 +68,7 @@ public class ReactorArtifactRepository
Artifact projectArtifact = findMatchingArtifact( project,
artifact );
- if ( projectArtifact != null && projectArtifact.getFile() !=
null && projectArtifact.getFile().exists() )
+ if ( !isWeaveMode && (projectArtifact != null &&
projectArtifact.getFile() != null && projectArtifact.getFile().exists()) )
{
//TODO: This is really completely wrong and should
probably be based on the phase that is currently being executed.
// If we are running before the packaging phase there is
going to be no archive anyway, but if we are running prior to package
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java?rev=931884&r1=931883&r2=931884&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java
Thu Apr 8 11:29:07 2010
@@ -22,6 +22,8 @@ package org.apache.maven.artifact.reposi
import java.util.ArrayList;
import java.util.List;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.MavenProject;
import org.apache.maven.repository.ArtifactTransferListener;
/**
@@ -68,6 +70,21 @@ public class DefaultRepositoryRequest
setTransferListener( repositoryRequest.getTransferListener() );
}
+ public static RepositoryRequest getRepositoryRequest(MavenSession session,
MavenProject project) {
+ RepositoryRequest request = new DefaultRepositoryRequest();
+
+ request.setCache(session.getRepositoryCache());
+ request.setLocalRepository(session.getLocalRepository());
+ if (project != null) {
+
request.setRemoteRepositories(project.getPluginArtifactRepositories());
+ }
+ request.setOffline(session.isOffline());
+ request.setForceUpdate(session.getRequest().isUpdateSnapshots());
+
request.setTransferListener(session.getRequest().getTransferListener());
+
+ return request;
+ }
+
public boolean isOffline()
{
return offline;
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java?rev=931884&r1=931883&r2=931884&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java
Thu Apr 8 11:29:07 2010
@@ -201,7 +201,7 @@ public class DefaultExceptionHandler
reference = exception.getClass().getSimpleName();
}
}
- else if ( exception instanceof LifecycleExecutionException )
+ else if ( exception instanceof LifecycleExecutionException)
{
reference = getReference( exception.getCause() );
}
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java?rev=931884&r1=931883&r2=931884&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
Thu Apr 8 11:29:07 2010
@@ -126,6 +126,10 @@ public class DefaultMavenExecutionReques
private ExecutionListener executionListener;
+ private String threadCount;
+ private boolean perCoreThreadCount;
+ private boolean weaveMode;
+
/**
* Suppress SNAPSHOT updates.
*
@@ -1024,4 +1028,28 @@ public class DefaultMavenExecutionReques
return this;
}
+ public String getThreadCount() {
+ return threadCount;
+ }
+
+ public void setThreadCount(String threadCount) {
+ this.threadCount = threadCount;
+ }
+
+ public boolean isThreadConfigurationPresent() {
+ return getThreadCount() != null;
+ }
+
+ public boolean isPerCoreThreadCount() {
+ return perCoreThreadCount;
+ }
+
+ public void setPerCoreThreadCount(boolean perCoreThreadCount) {
+ this.perCoreThreadCount = perCoreThreadCount;
+ }
+
+ public boolean isWeaveMode() {
+ return weaveMode;
+ }
+
}
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java?rev=931884&r1=931883&r2=931884&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
Thu Apr 8 11:29:07 2010
@@ -152,6 +152,15 @@ public interface MavenExecutionRequest
MavenExecutionRequest setMakeBehavior( String makeBehavior );
String getMakeBehavior();
+ void setThreadCount( String threadCount );
+ String getThreadCount();
+ boolean isThreadConfigurationPresent();
+ void setPerCoreThreadCount(boolean perCoreThreadCount);
+ boolean isPerCoreThreadCount();
+
+ boolean isWeaveMode();
+
+
// Recursive (really to just process the top-level POM)
MavenExecutionRequest setRecursive( boolean recursive );
boolean isRecursive();
@@ -269,6 +278,6 @@ public interface MavenExecutionRequest
ExecutionListener getExecutionListener();
MavenExecutionRequest setExecutionListener( ExecutionListener
executionListener );
- ProjectBuildingRequest getProjectBuildingRequest();
+ ProjectBuildingRequest getProjectBuildingRequest();
}
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java?rev=931884&r1=931883&r2=931884&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
Thu Apr 8 11:29:07 2010
@@ -22,6 +22,7 @@ package org.apache.maven.execution;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@@ -44,9 +45,10 @@ import org.codehaus.plexus.component.rep
* @version $Id$
*/
public class MavenSession
+ implements Cloneable
{
private PlexusContainer container;
-
+
private MavenExecutionRequest request;
private MavenExecutionResult result;
@@ -56,27 +58,28 @@ public class MavenSession
private Properties executionProperties;
private MavenProject currentProject;
-
+
/**
* These projects have already been topologically sorted in the {...@link
org.apache.maven.Maven} component before
* being passed into the session.
*/
private List<MavenProject> projects;
-
+
private MavenProject topLevelProject;
private ProjectDependencyGraph projectDependencyGraph;
- private Collection<String> blackListedProjects;
+ private boolean parallel;
- private final Map<String,Map<String,Map<String,Object>>>
pluginContextsByProjectAndPluginKey =
- new ConcurrentHashMap<String,Map<String,Map<String,Object>>> ();
+ private final Map<String, Map<String, Map<String, Object>>>
pluginContextsByProjectAndPluginKey =
+ new ConcurrentHashMap<String, Map<String, Map<String, Object>>>();
@Deprecated
- public MavenSession( PlexusContainer container, MavenExecutionRequest
request, MavenExecutionResult result, MavenProject project )
+ public MavenSession( PlexusContainer container, MavenExecutionRequest
request, MavenExecutionResult result,
+ MavenProject project )
{
- this( container, request, result, Arrays.asList( new MavenProject[]{
project } ) );
- }
+ this( container, request, result, Arrays.asList( new
MavenProject[]{project} ) );
+ }
@Deprecated
public MavenSession( PlexusContainer container, Settings settings,
ArtifactRepository localRepository,
@@ -105,7 +108,8 @@ public class MavenSession
}
@Deprecated
- public MavenSession( PlexusContainer container, MavenExecutionRequest
request, MavenExecutionResult result, List<MavenProject> projects )
+ public MavenSession( PlexusContainer container, MavenExecutionRequest
request, MavenExecutionResult result,
+ List<MavenProject> projects )
{
this.container = container;
this.request = request;
@@ -143,8 +147,8 @@ public class MavenSession
this.topLevelProject = null;
}
this.projects = projects;
- }
-
+ }
+
@Deprecated
public PlexusContainer getContainer()
{
@@ -198,7 +202,7 @@ public class MavenSession
* Gets the user properties to use for interpolation and profile
activation. The user properties have been
* configured directly by the user on his discretion, e.g. via the
{...@code -Dkey=value} parameter on the command
* line.
- *
+ *
* @return The user properties, never {...@code null}.
*/
public Properties getUserProperties()
@@ -209,7 +213,7 @@ public class MavenSession
/**
* Gets the system properties to use for interpolation and profile
activation. The system properties are collected
* from the runtime environment like {...@link System#getProperties()} and
environment variables.
- *
+ *
* @return The system properties, never {...@code null}.
*/
public Properties getSystemProperties()
@@ -237,7 +241,7 @@ public class MavenSession
{
return settings;
}
-
+
public List<MavenProject> getProjects()
{
return projects;
@@ -278,16 +282,16 @@ public class MavenSession
{
return request.getProjectBuildingRequest();
}
-
+
public List<String> getPluginGroups()
{
return request.getPluginGroups();
}
-
+
public boolean isOffline()
{
return request.isOffline();
- }
+ }
public MavenProject getTopLevelProject()
{
@@ -297,10 +301,10 @@ public class MavenSession
public MavenExecutionResult getResult()
{
return result;
- }
-
+ }
// Backward compat
+
public Map<String, Object> getPluginContext( PluginDescriptor plugin,
MavenProject project )
{
String projectKey = project.getId();
@@ -328,6 +332,11 @@ public class MavenSession
return pluginContext;
}
+ public ProjectDependencyGraph getProjectDependencyGraph()
+ {
+ return projectDependencyGraph;
+ }
+
public void setProjectDependencyGraph( ProjectDependencyGraph
projectDependencyGraph )
{
this.projectDependencyGraph = projectDependencyGraph;
@@ -338,24 +347,16 @@ public class MavenSession
return request.getReactorFailureBehavior();
}
- public boolean isBlackListed( MavenProject project )
- {
- return blackListedProjects != null && blackListedProjects.contains(
getId( project ) );
- }
-
- public void blackList( MavenProject project )
+ @Override
+ public MavenSession clone()
{
- if ( blackListedProjects == null )
+ try
{
- blackListedProjects = new HashSet<String>();
+ return (MavenSession) super.clone();
}
-
- if ( blackListedProjects.add( getId( project ) ) &&
projectDependencyGraph != null )
+ catch ( CloneNotSupportedException e )
{
- for ( MavenProject downstreamProject :
projectDependencyGraph.getDownstreamProjects( project, true ) )
- {
- blackListedProjects.add( getId( downstreamProject ) );
- }
+ throw new RuntimeException( "Bug", e );
}
}
@@ -375,4 +376,11 @@ public class MavenSession
return request.getStartTime();
}
+ public boolean isParallel() {
+ return parallel;
+ }
+
+ public void setParallel(boolean parallel) {
+ this.parallel = parallel;
+ }
}