in maven-project/src/main/java/org/apache/maven/project/ModelUtils.java [686:769]
public static void mergePluginDefinitions( Plugin child, Plugin parent, boolean handleAsInheritance )
{
if ( ( child == null ) || ( parent == null ) )
{
// nothing to do.
return;
}
if ( parent.isExtensions() )
{
child.setExtensions( true );
}
if ( ( child.getVersion() == null ) && ( parent.getVersion() != null ) )
{
child.setVersion( parent.getVersion() );
}
Xpp3Dom childConfiguration = (Xpp3Dom) child.getConfiguration();
Xpp3Dom parentConfiguration = (Xpp3Dom) parent.getConfiguration();
childConfiguration = Xpp3Dom.mergeXpp3Dom( childConfiguration, parentConfiguration );
child.setConfiguration( childConfiguration );
child.setDependencies( mergeDependencyList( child.getDependencies(), parent.getDependencies() ) );
// from here to the end of the method is dealing with merging of the <executions/> section.
String parentInherited = parent.getInherited();
boolean parentIsInherited = ( parentInherited == null ) || Boolean.valueOf( parentInherited ).booleanValue();
List<PluginExecution> parentExecutions = parent.getExecutions();
if ( ( parentExecutions != null ) && !parentExecutions.isEmpty() )
{
List<PluginExecution> mergedExecutions = new ArrayList<PluginExecution>();
Map<String, PluginExecution> assembledExecutions = new TreeMap<String, PluginExecution>();
Map<String, PluginExecution> childExecutions = child.getExecutionsAsMap();
for ( PluginExecution parentExecution : parentExecutions )
{
String inherited = parentExecution.getInherited();
boolean parentExecInherited = parentIsInherited && ( ( inherited == null ) || Boolean.valueOf( inherited ).booleanValue() );
if ( !handleAsInheritance || parentExecInherited )
{
PluginExecution assembled = parentExecution;
PluginExecution childExecution = (PluginExecution) childExecutions.get( parentExecution.getId() );
if ( childExecution != null )
{
mergePluginExecutionDefinitions( childExecution, parentExecution );
assembled = childExecution;
}
else if ( handleAsInheritance && ( parentInherited == null ) )
{
parentExecution.unsetInheritanceApplied();
}
assembledExecutions.put( assembled.getId(), assembled );
mergedExecutions.add( assembled );
}
}
for ( PluginExecution childExecution : child.getExecutions() )
{
if ( !assembledExecutions.containsKey( childExecution.getId() ) )
{
mergedExecutions.add( childExecution );
}
}
child.setExecutions( mergedExecutions );
child.flushExecutionMap();
}
}