mirror of https://github.com/apache/maven.git
Improve phase-tracking, event dispatching, and align build headers as events dispatched to the default event monitor...also, add debug-level enter/exit phase output in the default event monitor. Finally, refactored code that actually renders the build plan and executes the mojos for each task-segment in the lifecycle executor, to eliminate all the duplication.
This lays the ground work for improving cache management, since I also added event types for embedder control (keep in mind that event monitors can be used to control when the project/model cache is flushed, for example). git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@631455 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
db4820c72b
commit
b4e41217c6
|
@ -45,7 +45,6 @@ public class DefaultArtifactFilterManager implements ArtifactFilterManager
|
|||
artifacts.add( "jsch" );
|
||||
artifacts.add( "maven-artifact" );
|
||||
artifacts.add( "maven-artifact-manager" );
|
||||
artifacts.add( "maven-build-context" );
|
||||
artifacts.add( "maven-core" );
|
||||
artifacts.add( "maven-error-diagnoser" );
|
||||
artifacts.add( "maven-lifecycle" );
|
||||
|
@ -59,7 +58,7 @@ public class DefaultArtifactFilterManager implements ArtifactFilterManager
|
|||
artifacts.add( "maven-reporting-api" );
|
||||
artifacts.add( "maven-repository-metadata" );
|
||||
artifacts.add( "maven-settings" );
|
||||
//adding shared/maven-toolchain project here, even though not part of the default
|
||||
//adding shared/maven-toolchain project here, even though not part of the default
|
||||
//distro yet.
|
||||
artifacts.add( "maven-toolchain" );
|
||||
artifacts.add( "plexus-component-api" );
|
||||
|
|
|
@ -33,7 +33,7 @@ import org.apache.maven.extension.ExtensionScanningException;
|
|||
import org.apache.maven.lifecycle.LifecycleExecutionException;
|
||||
import org.apache.maven.lifecycle.LifecycleExecutor;
|
||||
import org.apache.maven.lifecycle.TaskValidationResult;
|
||||
import org.apache.maven.monitor.event.DefaultEventDispatcher;
|
||||
import org.apache.maven.monitor.event.DeprecationEventDispatcher;
|
||||
import org.apache.maven.monitor.event.EventDispatcher;
|
||||
import org.apache.maven.monitor.event.MavenEvents;
|
||||
import org.apache.maven.profiles.ProfileManager;
|
||||
|
@ -168,9 +168,9 @@ public class DefaultMaven
|
|||
return result;
|
||||
}
|
||||
|
||||
EventDispatcher dispatcher = new DefaultEventDispatcher( request.getEventMonitors() );
|
||||
EventDispatcher dispatcher = new DeprecationEventDispatcher( MavenEvents.DEPRECATIONS, request.getEventMonitors() );
|
||||
|
||||
String event = MavenEvents.REACTOR_EXECUTION;
|
||||
String event = MavenEvents.MAVEN_EXECUTION;
|
||||
|
||||
dispatcher.dispatchStart(
|
||||
event,
|
||||
|
@ -197,7 +197,9 @@ public class DefaultMaven
|
|||
|
||||
if ( !tvr.isTaskValid() )
|
||||
{
|
||||
result.addException( tvr.generateInvalidTaskException() );
|
||||
Exception e = tvr.generateInvalidTaskException();
|
||||
result.addException( e );
|
||||
dispatcher.dispatchError( event, request.getBaseDirectory(), e );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -228,11 +230,15 @@ public class DefaultMaven
|
|||
catch ( LifecycleExecutionException e )
|
||||
{
|
||||
result.addException( e );
|
||||
dispatcher.dispatchError( event, request.getBaseDirectory(), e );
|
||||
|
||||
return result;
|
||||
}
|
||||
catch ( BuildFailureException e )
|
||||
{
|
||||
result.addException( e );
|
||||
dispatcher.dispatchError( event, request.getBaseDirectory(), e );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -242,6 +248,8 @@ public class DefaultMaven
|
|||
|
||||
result.setBuildPlans( session.getBuildPlans() );
|
||||
|
||||
dispatcher.dispatchEnd( event, request.getBaseDirectory() );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import org.apache.maven.project.error.ProjectReporterManager;
|
|||
public final class CoreReporterManager
|
||||
{
|
||||
|
||||
// FIXME: This is not threadsafe!!
|
||||
private static CoreErrorReporter reporter;
|
||||
|
||||
private CoreReporterManager()
|
||||
|
|
|
@ -177,104 +177,7 @@ public class DefaultLifecycleExecutor
|
|||
|
||||
if ( segment.aggregate() )
|
||||
{
|
||||
if ( !reactorManager.isBlackListed( rootProject ) )
|
||||
{
|
||||
line();
|
||||
|
||||
getLogger().info( "Building " + rootProject.getName() );
|
||||
|
||||
getLogger().info( " " + segment );
|
||||
|
||||
line();
|
||||
|
||||
String target = rootProject.getId() + " ( " + segment + " )";
|
||||
|
||||
getLogger().debug( "Constructing build plan for " + target );
|
||||
|
||||
// !! This is ripe for refactoring to an aspect.
|
||||
// Event monitoring.
|
||||
String event = MavenEvents.PROJECT_EXECUTION;
|
||||
|
||||
long buildStartTime = System.currentTimeMillis();
|
||||
|
||||
dispatcher.dispatchStart(
|
||||
event,
|
||||
target );
|
||||
|
||||
ClassRealm oldLookupRealm = setProjectLookupRealm( session, rootProject );
|
||||
|
||||
try
|
||||
{
|
||||
session.setCurrentProject( rootProject );
|
||||
|
||||
// NEW: Build up the execution plan, including configuration.
|
||||
List mojoBindings = getLifecycleBindings(
|
||||
segment.getTasks(),
|
||||
rootProject,
|
||||
session,
|
||||
target );
|
||||
|
||||
// NEW: Then, iterate over each binding in that plan, and execute the associated mojo.
|
||||
// only call once, with the top-level project (assumed to be provided as a parameter)...
|
||||
for ( Iterator mojoIterator = mojoBindings.iterator(); mojoIterator.hasNext(); )
|
||||
{
|
||||
MojoBinding binding = (MojoBinding) mojoIterator.next();
|
||||
|
||||
try
|
||||
{
|
||||
executeGoalAndHandleFailures(
|
||||
binding,
|
||||
session,
|
||||
dispatcher,
|
||||
event,
|
||||
reactorManager,
|
||||
buildStartTime,
|
||||
target,
|
||||
true );
|
||||
}
|
||||
catch ( MojoFailureException e )
|
||||
{
|
||||
AggregatedBuildFailureException error = new AggregatedBuildFailureException(
|
||||
session.getExecutionRootDirectory(),
|
||||
binding,
|
||||
e );
|
||||
|
||||
dispatcher.dispatchError( event, target, error );
|
||||
|
||||
if ( handleExecutionFailure( reactorManager, rootProject, error, binding, buildStartTime ) )
|
||||
{
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
session.setCurrentProject( null );
|
||||
restoreLookupRealm( oldLookupRealm );
|
||||
}
|
||||
|
||||
|
||||
reactorManager.registerBuildSuccess(
|
||||
rootProject,
|
||||
System.currentTimeMillis() - buildStartTime );
|
||||
|
||||
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();
|
||||
}
|
||||
executeTaskSegmentsForProject( segment, rootProject, reactorManager, dispatcher, session );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -285,103 +188,154 @@ public class DefaultLifecycleExecutor
|
|||
{
|
||||
MavenProject currentProject = (MavenProject) projectIterator.next();
|
||||
|
||||
if ( !reactorManager.isBlackListed( currentProject ) )
|
||||
{
|
||||
line();
|
||||
|
||||
getLogger().info( "Building " + currentProject.getName() );
|
||||
|
||||
getLogger().info( " " + segment );
|
||||
|
||||
line();
|
||||
|
||||
String target = currentProject.getId() + " ( " + segment + " )";
|
||||
|
||||
// !! This is ripe for refactoring to an aspect.
|
||||
// Event monitoring.
|
||||
String event = MavenEvents.PROJECT_EXECUTION;
|
||||
|
||||
long buildStartTime = System.currentTimeMillis();
|
||||
|
||||
dispatcher.dispatchStart(
|
||||
event,
|
||||
target );
|
||||
|
||||
ClassRealm oldLookupRealm = setProjectLookupRealm( session, currentProject );
|
||||
|
||||
try
|
||||
{
|
||||
session.setCurrentProject( currentProject );
|
||||
|
||||
List mojoBindings = getLifecycleBindings(
|
||||
segment.getTasks(),
|
||||
currentProject,
|
||||
session,
|
||||
target );
|
||||
|
||||
for ( Iterator mojoIterator = mojoBindings.iterator(); mojoIterator.hasNext(); )
|
||||
{
|
||||
MojoBinding binding = (MojoBinding) mojoIterator.next();
|
||||
|
||||
getLogger().debug(
|
||||
"Mojo: " + binding.getGoal() + " has config:\n"
|
||||
+ binding.getConfiguration() );
|
||||
|
||||
try
|
||||
{
|
||||
executeGoalAndHandleFailures( binding, session, dispatcher,
|
||||
event, reactorManager,
|
||||
buildStartTime, target,
|
||||
false);
|
||||
}
|
||||
catch ( MojoFailureException e )
|
||||
{
|
||||
ProjectBuildFailureException error = new ProjectBuildFailureException(
|
||||
currentProject.getId(),
|
||||
binding,
|
||||
e );
|
||||
|
||||
dispatcher.dispatchError( event, target, error );
|
||||
|
||||
if ( handleExecutionFailure( reactorManager, currentProject, error, binding, buildStartTime ) )
|
||||
{
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
session.setCurrentProject( null );
|
||||
restoreLookupRealm( oldLookupRealm );
|
||||
}
|
||||
|
||||
reactorManager.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();
|
||||
}
|
||||
executeTaskSegmentsForProject( segment, currentProject, reactorManager, dispatcher, session );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void executeTaskSegmentsForProject( TaskSegment segment,
|
||||
MavenProject project,
|
||||
ReactorManager reactorManager,
|
||||
EventDispatcher dispatcher,
|
||||
MavenSession session )
|
||||
throws LifecycleExecutionException, BuildFailureException
|
||||
{
|
||||
if ( !reactorManager.isBlackListed( project ) )
|
||||
{
|
||||
// line();
|
||||
//
|
||||
// getLogger().info( "Building " + project.getName() );
|
||||
//
|
||||
// getLogger().info( " " + segment );
|
||||
//
|
||||
// line();
|
||||
|
||||
String target = project.getName() + "\nId: " + project.getId() + "\n" + segment;
|
||||
|
||||
getLogger().debug( "Constructing build plan for " + target );
|
||||
|
||||
// !! This is ripe for refactoring to an aspect.
|
||||
// Event monitoring.
|
||||
String event = MavenEvents.PROJECT_EXECUTION;
|
||||
|
||||
long buildStartTime = System.currentTimeMillis();
|
||||
|
||||
dispatcher.dispatchStart(
|
||||
event,
|
||||
target );
|
||||
|
||||
ClassRealm oldLookupRealm = setProjectLookupRealm( session, project );
|
||||
|
||||
try
|
||||
{
|
||||
session.setCurrentProject( project );
|
||||
|
||||
// NEW: Build up the execution plan, including configuration.
|
||||
List mojoBindings = getLifecycleBindings(
|
||||
segment.getTasks(),
|
||||
project,
|
||||
session,
|
||||
target );
|
||||
|
||||
String currentPhase = null;
|
||||
|
||||
// NEW: Then, iterate over each binding in that plan, and execute the associated mojo.
|
||||
// only call once, with the top-level project (assumed to be provided as a parameter)...
|
||||
for ( Iterator mojoIterator = mojoBindings.iterator(); mojoIterator.hasNext(); )
|
||||
{
|
||||
MojoBinding binding = (MojoBinding) mojoIterator.next();
|
||||
|
||||
String phase = binding.getPhase() == null ? null : binding.getPhase().getName();
|
||||
|
||||
if ( ( currentPhase != null ) && !currentPhase.equals( phase ) )
|
||||
{
|
||||
dispatcher.dispatchEnd( MavenEvents.PHASE_EXECUTION, currentPhase );
|
||||
currentPhase = null;
|
||||
}
|
||||
|
||||
if ( ( currentPhase == null ) && ( phase != null ) )
|
||||
{
|
||||
currentPhase = phase;
|
||||
dispatcher.dispatchStart( MavenEvents.PHASE_EXECUTION, currentPhase );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
executeGoalAndHandleFailures(
|
||||
binding,
|
||||
session,
|
||||
dispatcher,
|
||||
event,
|
||||
reactorManager,
|
||||
buildStartTime,
|
||||
target,
|
||||
segment.aggregate() );
|
||||
}
|
||||
catch ( MojoFailureException e )
|
||||
{
|
||||
if ( segment.aggregate() )
|
||||
{
|
||||
AggregatedBuildFailureException error = new AggregatedBuildFailureException(
|
||||
session.getExecutionRootDirectory(),
|
||||
binding,
|
||||
e );
|
||||
|
||||
dispatcher.dispatchError( event, target, error );
|
||||
|
||||
if ( handleExecutionFailure( reactorManager, project, error, binding, buildStartTime ) )
|
||||
{
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ProjectBuildFailureException error = new ProjectBuildFailureException(
|
||||
project.getId(),
|
||||
binding,
|
||||
e );
|
||||
|
||||
dispatcher.dispatchError( event, target, error );
|
||||
|
||||
if ( handleExecutionFailure( reactorManager, project, error, binding, buildStartTime ) )
|
||||
{
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dispatcher.dispatchEnd( MavenEvents.PHASE_EXECUTION, currentPhase );
|
||||
}
|
||||
finally
|
||||
{
|
||||
session.setCurrentProject( null );
|
||||
restoreLookupRealm( oldLookupRealm );
|
||||
}
|
||||
|
||||
|
||||
reactorManager.registerBuildSuccess(
|
||||
project,
|
||||
System.currentTimeMillis() - buildStartTime );
|
||||
|
||||
dispatcher.dispatchEnd(
|
||||
event,
|
||||
target );
|
||||
}
|
||||
else
|
||||
{
|
||||
line();
|
||||
|
||||
getLogger().info( "SKIPPING " + project.getName() );
|
||||
|
||||
getLogger().info( " " + segment );
|
||||
|
||||
getLogger().info( "This project has been banned from further executions due to previous failures." );
|
||||
|
||||
line();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Since each project can have its own {@link ClassRealm} instance that inherits
|
||||
* from the core Maven realm, and contains the specific build-extension
|
||||
|
@ -939,7 +893,7 @@ public class DefaultLifecycleExecutor
|
|||
{
|
||||
StringBuffer message = new StringBuffer();
|
||||
|
||||
message.append( " task-segment: [" );
|
||||
message.append( "task-segment: [" );
|
||||
|
||||
for ( Iterator it = tasks.iterator(); it.hasNext(); )
|
||||
{
|
||||
|
|
|
@ -192,6 +192,8 @@ public class BuildPlan
|
|||
public List renderExecutionPlan( final Stack executionStack )
|
||||
throws NoSuchPhaseException
|
||||
{
|
||||
LifecycleUtils.setupTrackingInfo( bindings );
|
||||
|
||||
List plan = new ArrayList();
|
||||
|
||||
for ( Iterator it = tasks.iterator(); it.hasNext(); )
|
||||
|
|
|
@ -127,7 +127,18 @@ public final class BuildPlanUtils
|
|||
StringBuffer listing = new StringBuffer();
|
||||
|
||||
listing.append( MojoBindingUtils.toString( binding ) );
|
||||
listing.append( " [executionId: " ).append( binding.getExecutionId() ).append( "]" );
|
||||
listing.append( " [executionId: " ).append( binding.getExecutionId() ).append( ", phase: " );
|
||||
|
||||
if ( ( binding.getPhase() != null ) && ( binding.getPhase().getName() != null ) )
|
||||
{
|
||||
listing.append( binding.getPhase().getName() );
|
||||
}
|
||||
else
|
||||
{
|
||||
listing.append( "None specified" );
|
||||
}
|
||||
|
||||
listing.append( "]" );
|
||||
|
||||
if ( extendedInfo )
|
||||
{
|
||||
|
|
|
@ -28,20 +28,66 @@ public class DefaultEventMonitor
|
|||
extends AbstractSelectiveEventMonitor
|
||||
{
|
||||
|
||||
private static final String[] START_EVENTS = {MavenEvents.MOJO_EXECUTION};
|
||||
private static final String[] START_EVENTS = {
|
||||
MavenEvents.PROJECT_EXECUTION,
|
||||
MavenEvents.PHASE_EXECUTION,
|
||||
MavenEvents.MOJO_EXECUTION
|
||||
};
|
||||
|
||||
private static final String[] END_EVENTS = {
|
||||
MavenEvents.PHASE_EXECUTION
|
||||
};
|
||||
|
||||
private final Logger logger;
|
||||
|
||||
public DefaultEventMonitor( Logger logger )
|
||||
{
|
||||
super( START_EVENTS, MavenEvents.NO_EVENTS, MavenEvents.NO_EVENTS );
|
||||
super( START_EVENTS, END_EVENTS, MavenEvents.NO_EVENTS );
|
||||
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
protected void doStartEvent( String event, String target, long time )
|
||||
{
|
||||
logger.info( "[" + target + "]" );
|
||||
if ( MavenEvents.MOJO_EXECUTION.equals( event ) )
|
||||
{
|
||||
logger.info( "[" + target + "]" );
|
||||
}
|
||||
else if ( MavenEvents.PHASE_EXECUTION.equals( event ) )
|
||||
{
|
||||
logger.debug( line() );
|
||||
logger.debug( "Entering lifecycle phase: " + target );
|
||||
logger.debug( line() );
|
||||
}
|
||||
else if ( MavenEvents.PROJECT_EXECUTION.equals( event ) )
|
||||
{
|
||||
logger.info( line() );
|
||||
String[] targetParts = target.split( "\n" );
|
||||
logger.info( "Building " + targetParts[0] );
|
||||
if ( targetParts.length > 0 )
|
||||
{
|
||||
logger.info( "" );
|
||||
for ( int i = 1; i < targetParts.length; i++ )
|
||||
{
|
||||
logger.info( targetParts[i] );
|
||||
}
|
||||
}
|
||||
logger.info( line() );
|
||||
}
|
||||
}
|
||||
|
||||
protected void doEndEvent( String event,
|
||||
String target,
|
||||
long timestamp )
|
||||
{
|
||||
logger.debug( line() );
|
||||
logger.debug( "Completed lifecycle phase: " + target );
|
||||
logger.debug( line() );
|
||||
}
|
||||
|
||||
private String line()
|
||||
{
|
||||
return "------------------------------------------------------------------------";
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package org.apache.maven.monitor.event;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class DeprecationEventDispatcher
|
||||
extends DefaultEventDispatcher
|
||||
{
|
||||
|
||||
private final Map deprecatedEventsByReplacement;
|
||||
|
||||
public DeprecationEventDispatcher( Map deprecatedEventsByReplacement )
|
||||
{
|
||||
this.deprecatedEventsByReplacement = deprecatedEventsByReplacement;
|
||||
}
|
||||
|
||||
public DeprecationEventDispatcher( Map deprecatedEventsByReplacement, List eventMonitors )
|
||||
{
|
||||
super( eventMonitors );
|
||||
this.deprecatedEventsByReplacement = deprecatedEventsByReplacement;
|
||||
}
|
||||
|
||||
public void dispatchEnd( String event,
|
||||
String target )
|
||||
{
|
||||
super.dispatchEnd( event, target );
|
||||
if ( deprecatedEventsByReplacement.containsKey( event ) )
|
||||
{
|
||||
super.dispatchEnd( (String) deprecatedEventsByReplacement.get( event ), target );
|
||||
}
|
||||
}
|
||||
|
||||
public void dispatchError( String event,
|
||||
String target,
|
||||
Throwable cause )
|
||||
{
|
||||
super.dispatchError( event, target, cause );
|
||||
if ( deprecatedEventsByReplacement.containsKey( event ) )
|
||||
{
|
||||
super.dispatchError( (String) deprecatedEventsByReplacement.get( event ), target, cause );
|
||||
}
|
||||
}
|
||||
|
||||
public void dispatchStart( String event,
|
||||
String target )
|
||||
{
|
||||
super.dispatchStart( event, target );
|
||||
if ( deprecatedEventsByReplacement.containsKey( event ) )
|
||||
{
|
||||
super.dispatchStart( (String) deprecatedEventsByReplacement.get( event ), target );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,8 @@
|
|||
package org.apache.maven.monitor.event;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
|
@ -28,17 +31,37 @@ public final class MavenEvents
|
|||
public static final String PHASE_EXECUTION = "phase-execute";
|
||||
public static final String MOJO_EXECUTION = "mojo-execute";
|
||||
public static final String PROJECT_EXECUTION = "project-execute";
|
||||
|
||||
/** @deprecated Use {@link MavenEvents#MAVEN_EXECUTION} instead. */
|
||||
public static final String REACTOR_EXECUTION = "reactor-execute";
|
||||
|
||||
public static final String MAVEN_EXECUTION = "maven-execute";
|
||||
|
||||
public static final String EMBEDDER_LIFECYCLE = "embedder-lifecycle";
|
||||
public static final String EMBEDDER_METHOD = "embedder-method";
|
||||
|
||||
public static final Map DEPRECATIONS;
|
||||
|
||||
static
|
||||
{
|
||||
Map dep = new HashMap();
|
||||
|
||||
dep.put( MAVEN_EXECUTION, REACTOR_EXECUTION );
|
||||
|
||||
DEPRECATIONS = dep;
|
||||
}
|
||||
|
||||
public static final String[] ALL_EVENTS = {
|
||||
PHASE_EXECUTION,
|
||||
MOJO_EXECUTION,
|
||||
PROJECT_EXECUTION,
|
||||
REACTOR_EXECUTION
|
||||
REACTOR_EXECUTION,
|
||||
MAVEN_EXECUTION,
|
||||
EMBEDDER_LIFECYCLE,
|
||||
EMBEDDER_METHOD
|
||||
};
|
||||
|
||||
|
||||
public static final String[] NO_EVENTS = {};
|
||||
|
||||
|
||||
private MavenEvents()
|
||||
{
|
||||
}
|
||||
|
|
|
@ -12,8 +12,10 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
|
|||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class LifecycleUtils
|
||||
{
|
||||
|
@ -22,6 +24,33 @@ public class LifecycleUtils
|
|||
{
|
||||
}
|
||||
|
||||
public static void setupTrackingInfo( final LifecycleBindings bindings )
|
||||
{
|
||||
for ( Iterator bindingIt = bindings.getBindingList().iterator(); bindingIt.hasNext(); )
|
||||
{
|
||||
LifecycleBinding binding = (LifecycleBinding) bindingIt.next();
|
||||
|
||||
if ( binding == null )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
LinkedHashMap phaseMap = binding.getOrderedPhaseMapping();
|
||||
for ( Iterator phaseIt = phaseMap.entrySet().iterator(); phaseIt.hasNext(); )
|
||||
{
|
||||
Map.Entry entry = (Entry) phaseIt.next();
|
||||
Phase phase = (Phase) entry.getValue();
|
||||
|
||||
String phaseName = (String) entry.getKey();
|
||||
|
||||
if ( phase != null )
|
||||
{
|
||||
phase.setLifecycleInfo( phaseName, binding );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void setOrigin( final LifecycleBindings bindings, final String origin )
|
||||
{
|
||||
for ( Iterator bindingIt = bindings.getBindingList().iterator(); bindingIt.hasNext(); )
|
||||
|
|
|
@ -116,6 +116,11 @@
|
|||
throw new UnsupportedOperationException( "Unsupported in base-class." );
|
||||
}
|
||||
|
||||
public java.util.LinkedHashMap getOrderedPhaseMapping()
|
||||
{
|
||||
throw new UnsupportedOperationException( "Unsupported in base-class." );
|
||||
}
|
||||
|
||||
public java.util.List getPhasesInOrder()
|
||||
{
|
||||
throw new UnsupportedOperationException( "Unsupported in base-class." );
|
||||
|
@ -168,26 +173,24 @@
|
|||
return "clean";
|
||||
}
|
||||
|
||||
public java.util.LinkedHashMap getOrderedPhaseMapping()
|
||||
{
|
||||
java.util.LinkedHashMap phases = new java.util.LinkedHashMap();
|
||||
phases.put( "pre-clean", getPreClean() );
|
||||
phases.put( "clean", getClean() );
|
||||
phases.put( "post-clean", getPostClean() );
|
||||
|
||||
return phases;
|
||||
}
|
||||
|
||||
public java.util.List getPhasesInOrder()
|
||||
{
|
||||
java.util.List phases = new java.util.ArrayList();
|
||||
|
||||
phases.add( getPreClean() );
|
||||
phases.add( getClean() );
|
||||
phases.add( getPostClean() );
|
||||
|
||||
return java.util.Collections.unmodifiableList( phases );
|
||||
return new java.util.ArrayList( getOrderedPhaseMapping().values() );
|
||||
}
|
||||
|
||||
public java.util.List getPhaseNamesInOrder()
|
||||
{
|
||||
java.util.List phases = new java.util.ArrayList();
|
||||
|
||||
phases.add( "pre-clean" );
|
||||
phases.add( "clean" );
|
||||
phases.add( "post-clean" );
|
||||
|
||||
return java.util.Collections.unmodifiableList( phases );
|
||||
return new java.util.ArrayList( getOrderedPhaseMapping().keySet() );
|
||||
}
|
||||
]]></code>
|
||||
</codeSegment>
|
||||
|
@ -392,66 +395,44 @@
|
|||
return "build";
|
||||
}
|
||||
|
||||
public java.util.LinkedHashMap getOrderedPhaseMapping()
|
||||
{
|
||||
java.util.LinkedHashMap phases = new java.util.LinkedHashMap();
|
||||
phases.put( "validate", getValidate() );
|
||||
phases.put( "initialize", getInitialize() );
|
||||
phases.put( "generate-sources", getGenerateSources() );
|
||||
phases.put( "process-sources", getProcessSources() );
|
||||
phases.put( "generate-resources", getGenerateResources() );
|
||||
phases.put( "process-resources", getProcessResources() );
|
||||
phases.put( "compile", getCompile() );
|
||||
phases.put( "process-classes", getProcessClasses() );
|
||||
phases.put( "generate-test-sources", getGenerateTestSources() );
|
||||
phases.put( "process-test-sources", getProcessTestSources() );
|
||||
phases.put( "generate-test-resources", getGenerateTestResources() );
|
||||
phases.put( "process-test-resources", getProcessTestResources() );
|
||||
phases.put( "test-compile", getTestCompile() );
|
||||
phases.put( "process-test-classes", getProcessTestClasses() );
|
||||
phases.put( "test", getTest() );
|
||||
phases.put( "prepare-package", getPreparePackage() );
|
||||
phases.put( "package", getCreatePackage() );
|
||||
phases.put( "pre-integration-test", getPreIntegrationTest() );
|
||||
phases.put( "integration-test", getIntegrationTest() );
|
||||
phases.put( "post-integration-test", getPostIntegrationTest() );
|
||||
phases.put( "verify", getVerify() );
|
||||
phases.put( "install", getInstall() );
|
||||
phases.put( "deploy", getDeploy() );
|
||||
|
||||
return phases;
|
||||
}
|
||||
|
||||
public java.util.List getPhasesInOrder()
|
||||
{
|
||||
java.util.List phases = new java.util.ArrayList();
|
||||
|
||||
phases.add( getValidate() );
|
||||
phases.add( getInitialize() );
|
||||
phases.add( getGenerateSources() );
|
||||
phases.add( getProcessSources() );
|
||||
phases.add( getGenerateResources() );
|
||||
phases.add( getProcessResources() );
|
||||
phases.add( getCompile() );
|
||||
phases.add( getProcessClasses() );
|
||||
phases.add( getGenerateTestSources() );
|
||||
phases.add( getProcessTestSources() );
|
||||
phases.add( getGenerateTestResources() );
|
||||
phases.add( getProcessTestResources() );
|
||||
phases.add( getTestCompile() );
|
||||
phases.add( getProcessTestClasses() );
|
||||
phases.add( getTest() );
|
||||
phases.add( getPreparePackage() );
|
||||
phases.add( getCreatePackage() );
|
||||
phases.add( getPreIntegrationTest() );
|
||||
phases.add( getIntegrationTest() );
|
||||
phases.add( getPostIntegrationTest() );
|
||||
phases.add( getVerify() );
|
||||
phases.add( getInstall() );
|
||||
phases.add( getDeploy() );
|
||||
|
||||
return java.util.Collections.unmodifiableList( phases );
|
||||
return new java.util.ArrayList( getOrderedPhaseMapping().values() );
|
||||
}
|
||||
|
||||
public java.util.List getPhaseNamesInOrder()
|
||||
{
|
||||
java.util.List phases = new java.util.ArrayList();
|
||||
|
||||
phases.add( "validate" );
|
||||
phases.add( "initialize" );
|
||||
phases.add( "generate-sources" );
|
||||
phases.add( "process-sources" );
|
||||
phases.add( "generate-resources" );
|
||||
phases.add( "process-resources" );
|
||||
phases.add( "compile" );
|
||||
phases.add( "process-classes" );
|
||||
phases.add( "generate-test-sources" );
|
||||
phases.add( "process-test-sources" );
|
||||
phases.add( "generate-test-resources" );
|
||||
phases.add( "process-test-resources" );
|
||||
phases.add( "test-compile" );
|
||||
phases.add( "process-test-classes" );
|
||||
phases.add( "test" );
|
||||
phases.add( "prepare-package" );
|
||||
phases.add( "package" );
|
||||
phases.add( "pre-integration-test" );
|
||||
phases.add( "integration-test" );
|
||||
phases.add( "post-integration-test" );
|
||||
phases.add( "verify" );
|
||||
phases.add( "install" );
|
||||
phases.add( "deploy" );
|
||||
|
||||
return java.util.Collections.unmodifiableList( phases );
|
||||
return new java.util.ArrayList( getOrderedPhaseMapping().keySet() );
|
||||
}
|
||||
]]></code>
|
||||
</codeSegment>
|
||||
|
@ -503,29 +484,26 @@
|
|||
{
|
||||
return "site";
|
||||
}
|
||||
|
||||
|
||||
public java.util.LinkedHashMap getOrderedPhaseMapping()
|
||||
{
|
||||
java.util.LinkedHashMap map = new java.util.LinkedHashMap();
|
||||
map.put( "pre-site", getPreSite() );
|
||||
map.put( "site", getSite() );
|
||||
map.put( "post-site", getPostSite() );
|
||||
map.put( "site-deploy", getSiteDeploy() );
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
public java.util.List getPhasesInOrder()
|
||||
{
|
||||
java.util.List phases = new java.util.ArrayList();
|
||||
|
||||
phases.add( getPreSite() );
|
||||
phases.add( getSite() );
|
||||
phases.add( getPostSite() );
|
||||
phases.add( getSiteDeploy() );
|
||||
|
||||
return java.util.Collections.unmodifiableList( phases );
|
||||
return new java.util.ArrayList( getOrderedPhaseMapping().values() );
|
||||
}
|
||||
|
||||
public java.util.List getPhaseNamesInOrder()
|
||||
{
|
||||
java.util.List phases = new java.util.ArrayList();
|
||||
|
||||
phases.add( "pre-site" );
|
||||
phases.add( "site" );
|
||||
phases.add( "post-site" );
|
||||
phases.add( "site-deploy" );
|
||||
|
||||
return java.util.Collections.unmodifiableList( phases );
|
||||
return new java.util.ArrayList( getOrderedPhaseMapping().keySet() );
|
||||
}
|
||||
]]></code>
|
||||
</codeSegment>
|
||||
|
@ -546,6 +524,50 @@
|
|||
</association>
|
||||
</field>
|
||||
</fields>
|
||||
<codeSegments>
|
||||
<codeSegment>
|
||||
<version>1.0.0</version>
|
||||
<code><![CDATA[
|
||||
private String name;
|
||||
private LifecycleBinding lifecycleBinding;
|
||||
|
||||
/**
|
||||
* Get the name of this phase.
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the LifecycleBinding instance to which this Phase belongs.
|
||||
*/
|
||||
public LifecycleBinding getLifecycleBinding()
|
||||
{
|
||||
return lifecycleBinding;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name of this phase, and the Lifecycle instance to which is belongs.
|
||||
*/
|
||||
public void setLifecycleInfo( String phaseName, LifecycleBinding lifecycleBinding )
|
||||
{
|
||||
this.name = phaseName;
|
||||
this.lifecycleBinding = lifecycleBinding;
|
||||
|
||||
java.util.List bindings = getBindings();
|
||||
if ( bindings != null )
|
||||
{
|
||||
for( java.util.Iterator it = bindings.iterator(); it.hasNext(); )
|
||||
{
|
||||
MojoBinding binding = (MojoBinding) it.next();
|
||||
binding.setLifecycleInfo( this );
|
||||
}
|
||||
}
|
||||
}
|
||||
]]></code>
|
||||
</codeSegment>
|
||||
</codeSegments>
|
||||
</class>
|
||||
<class>
|
||||
<name>MojoBinding</name>
|
||||
|
@ -674,6 +696,26 @@
|
|||
{
|
||||
this.lateBound = lateBound;
|
||||
}
|
||||
|
||||
private Phase phase;
|
||||
|
||||
/**
|
||||
* Get the Phase instance to which this MojoBinding is bound. NOTE: In
|
||||
* some cases, the phase name may not be known, or may not exist (as in the
|
||||
* case of a direct mojo invocation from the command line or embedder).
|
||||
*/
|
||||
public Phase getPhase()
|
||||
{
|
||||
return phase;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Phase instance to which this MojoBinding is bound.
|
||||
*/
|
||||
public void setLifecycleInfo( Phase phase )
|
||||
{
|
||||
this.phase = phase;
|
||||
}
|
||||
]]></code>
|
||||
</codeSegment>
|
||||
</codeSegments>
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.apache.maven.project.error;
|
|||
public final class ProjectReporterManager
|
||||
{
|
||||
|
||||
// FIXME: This is not threadsafe!
|
||||
private static ProjectErrorReporter reporter;
|
||||
|
||||
private ProjectReporterManager()
|
||||
|
|
Loading…
Reference in New Issue