in maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java [245:378]
private void executeTaskSegments( final List taskSegments, final ReactorManager rm, final MavenSession session,
final MavenProject rootProject, final EventDispatcher dispatcher )
throws LifecycleExecutionException, BuildFailureException
{
for ( Iterator it = taskSegments.iterator(); it.hasNext(); )
{
TaskSegment segment = (TaskSegment) it.next();
if ( segment.aggregate() )
{
if ( !rm.isBlackListed( rootProject ) )
{
line();
getLogger().info( "Building " + rootProject.getName() );
getLogger().info( " " + segment );
line();
// !! This is ripe for refactoring to an aspect.
// Event monitoring.
String event = MavenEvents.PROJECT_EXECUTION;
long buildStartTime = System.currentTimeMillis();
String target = rootProject.getId() + " ( " + segment + " )";
dispatcher.dispatchStart( event, target );
try
{
session.setCurrentProject( rootProject );
// only call once, with the top-level project (assumed to be provided as a parameter)...
for ( Iterator goalIterator = segment.getTasks().iterator(); goalIterator.hasNext(); )
{
String task = (String) goalIterator.next();
executeGoalAndHandleFailures( task, session, rootProject, dispatcher, event, rm, buildStartTime,
target );
}
rm.registerBuildSuccess( rootProject, System.currentTimeMillis() - buildStartTime );
}
finally
{
session.setCurrentProject( null );
}
dispatcher.dispatchEnd( event, target );
}
else
{
line();
getLogger().info( "SKIPPING " + rootProject.getName() );
getLogger().info( " " + segment );
getLogger().info(
"This project has been banned from further executions due to previous failures." );
line();
}
}
else
{
List sortedProjects = session.getSortedProjects();
// iterate over projects, and execute on each...
for ( Iterator projectIterator = sortedProjects.iterator(); projectIterator.hasNext(); )
{
MavenProject currentProject = (MavenProject) projectIterator.next();
if ( !rm.isBlackListed( currentProject ) )
{
line();
getLogger().info( "Building " + currentProject.getName() );
getLogger().info( " " + segment );
line();
// !! This is ripe for refactoring to an aspect.
// Event monitoring.
String event = MavenEvents.PROJECT_EXECUTION;
long buildStartTime = System.currentTimeMillis();
String target = currentProject.getId() + " ( " + segment + " )";
dispatcher.dispatchStart( event, target );
try
{
session.setCurrentProject( currentProject );
for ( Iterator goalIterator = segment.getTasks().iterator(); goalIterator.hasNext(); )
{
String task = (String) goalIterator.next();
executeGoalAndHandleFailures( task, session, currentProject, dispatcher, event, rm,
buildStartTime, target );
}
}
finally
{
session.setCurrentProject( null );
}
rm.registerBuildSuccess( currentProject, System.currentTimeMillis() - buildStartTime );
dispatcher.dispatchEnd( event, target );
}
else
{
line();
getLogger().info( "SKIPPING " + currentProject.getName() );
getLogger().info( " " + segment );
getLogger().info(
"This project has been banned from further executions due to previous failures." );
line();
}
}
}
}
}