for ( Iterator i = lifecycleOverlay.getPhases().iterator(); i.hasNext(); )
{
Phase phase = (Phase) i.next();
for ( Iterator j = phase.getExecutions().iterator(); j.hasNext(); )
{
Execution exec = (Execution) j.next();
for ( Iterator k = exec.getGoals().iterator(); k.hasNext(); )
{
String goal = (String) k.next();
PluginDescriptor lifecyclePluginDescriptor;
String lifecycleGoal;
// Here we are looking to see if we have a mojo from an external plugin.
// If we do then we need to lookup the plugin descriptor for the externally
// referenced plugin so that we can overly the execution into the lifecycle.
// An example of this is the corbertura plugin that needs to call the surefire
// plugin in forking mode.
//
//<phase>
// <id>test</id>
// <executions>
// <execution>
// <goals>
// <goal>org.apache.maven.plugins:maven-surefire-plugin:test</goal>
// </goals>
// <configuration>
// <classesDirectory>${project.build.directory}/generated-classes/cobertura</classesDirectory>
// <ignoreFailures>true</ignoreFailures>
// <forkMode>once</forkMode>
// </configuration>
// </execution>
// </executions>
//</phase>
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
if ( goal.indexOf( ":" ) > 0 )
{
String[] s = StringUtils.split( goal, ":" );
String groupId = s[0];
String artifactId = s[1];
lifecycleGoal = s[2];
Plugin plugin = new Plugin();
plugin.setGroupId( groupId );
plugin.setArtifactId( artifactId );
lifecyclePluginDescriptor = verifyPlugin( plugin, project, session.getSettings(),
session.getLocalRepository() );
if ( lifecyclePluginDescriptor == null )
{
throw new LifecycleExecutionException(
"Unable to find plugin " + groupId + ":" + artifactId );
}
}
else
{
lifecyclePluginDescriptor = pluginDescriptor;
lifecycleGoal = goal;
}
Xpp3Dom configuration = (Xpp3Dom) exec.getConfiguration();
// NOTE: This seems to be duplicated below. Why??
if ( phase.getConfiguration() != null )
{
configuration = Xpp3Dom.mergeXpp3Dom( new Xpp3Dom( (Xpp3Dom) phase.getConfiguration() ),
configuration );
}
MojoDescriptor desc = getMojoDescriptor( lifecyclePluginDescriptor, lifecycleGoal );
MojoExecution mojoExecution;
if ( executionId.startsWith( MojoExecution.DEFAULT_EXEC_ID_PREFIX ) )
{
mojoExecution = new MojoExecution( desc, configuration );
}
else
{
mojoExecution = new MojoExecution( desc, configuration, executionId );
}
addToLifecycleMappings( lifecycleMappings, phase.getId(), mojoExecution,
session.getSettings() );
}
}
if ( phase.getConfiguration() != null )
{
// Merge in general configuration for a phase.
// TODO: this is all kind of backwards from the POMM. Let's align it all under 2.1.
// We should create a new lifecycle executor for modelVersion >5.0.0
for ( Iterator j = lifecycleMappings.values().iterator(); j.hasNext(); )
{
List tasks = (List) j.next();
for ( Iterator k = tasks.iterator(); k.hasNext(); )
{
MojoExecution exec = (MojoExecution) k.next();
Xpp3Dom configuration = Xpp3Dom.mergeXpp3Dom(
new Xpp3Dom( (Xpp3Dom) phase.getConfiguration() ), exec.getConfiguration() );
exec.setConfiguration( configuration );
}
}
}
}