[MNG-2221] Fixing caching of merged plugins to prevent them from appearing/executing twice in the resulting child POM. See two new unit tests in ModelUtilsTest for proof.

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@421309 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
John Dennis Casey 2006-07-12 16:32:39 +00:00
parent 864fbd29e2
commit cc859f5cfb
2 changed files with 87 additions and 3 deletions

View File

@ -82,6 +82,11 @@ public final class ModelUtils
String parentInherited = parentPlugin.getInherited(); String parentInherited = parentPlugin.getInherited();
// only merge plugin definition from the parent if at least one
// of these is true:
// 1. we're not processing the plugins in an inheritance-based merge
// 2. the parent's <inherited/> flag is not set
// 3. the parent's <inherited/> flag is set to true
if ( !handleAsInheritance || parentInherited == null || if ( !handleAsInheritance || parentInherited == null ||
Boolean.valueOf( parentInherited ).booleanValue() ) Boolean.valueOf( parentInherited ).booleanValue() )
{ {
@ -97,18 +102,21 @@ public final class ModelUtils
mergePluginDefinitions( childPlugin, parentPlugin, handleAsInheritance ); mergePluginDefinitions( childPlugin, parentPlugin, handleAsInheritance );
} }
// if we're processing this as an inheritance-based merge, and
// the parent's <inherited/> flag is not set, then we need to
// clear the inherited flag in the merge result.
if ( handleAsInheritance && parentInherited == null ) if ( handleAsInheritance && parentInherited == null )
{ {
assembledPlugin.unsetInheritanceApplied(); assembledPlugin.unsetInheritanceApplied();
} }
mergedPlugins.add(assembledPlugin); mergedPlugins.add(assembledPlugin);
// fix for MNG-2221 (assembly cache was not being populated for later reference):
assembledPlugins.put( assembledPlugin.getKey(), assembledPlugin );
} }
} }
// FIXME: not sure what's intended here, but this entire
// loop can be replaced by 'mergedPlugins.addAll( childPlugins.values() );
// since assembledPlugins is never updated and remains empty.
for ( Iterator it = childPlugins.values().iterator(); it.hasNext(); ) for ( Iterator it = childPlugins.values().iterator(); it.hasNext(); )
{ {
Plugin childPlugin = (Plugin) it.next(); Plugin childPlugin = (Plugin) it.next();

View File

@ -2,12 +2,14 @@ package org.apache.maven.project;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.maven.model.Build;
import org.apache.maven.model.Plugin; import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginContainer; import org.apache.maven.model.PluginContainer;
import org.apache.maven.model.PluginExecution; import org.apache.maven.model.PluginExecution;
import org.apache.maven.model.Dependency; import org.apache.maven.model.Dependency;
import java.util.Collections; import java.util.Collections;
import java.util.List;
/* /*
* Copyright 2001-2005 The Apache Software Foundation. * Copyright 2001-2005 The Apache Software Foundation.
@ -77,6 +79,80 @@ public class ModelUtilsTest
assertEquals( 2, child.getExecutions().size() ); assertEquals( 2, child.getExecutions().size() );
} }
public void testShouldMergeOnePluginWithInheritExecutionWithoutDuplicatingPluginInList()
{
Plugin parent = new Plugin();
parent.setArtifactId( "testArtifact" );
parent.setGroupId( "testGroup" );
parent.setVersion( "1.0" );
PluginExecution parentExecution = new PluginExecution();
parentExecution.setId( "testExecution" );
parent.addExecution( parentExecution );
Build parentContainer = new Build();
parentContainer.addPlugin( parent );
Plugin child = new Plugin();
child.setArtifactId( "testArtifact" );
child.setGroupId( "testGroup" );
child.setVersion( "1.0" );
Build childContainer = new Build();
childContainer.addPlugin( child );
ModelUtils.mergePluginLists( childContainer, parentContainer, true );
List plugins = childContainer.getPlugins();
assertEquals( 1, plugins.size() );
Plugin plugin = (Plugin) plugins.get( 0 );
assertEquals( 1, plugin.getExecutions().size() );
}
public void testShouldMergePluginWithDifferentExecutionFromParentWithoutDuplicatingPluginInList()
{
Plugin parent = new Plugin();
parent.setArtifactId( "testArtifact" );
parent.setGroupId( "testGroup" );
parent.setVersion( "1.0" );
PluginExecution parentExecution = new PluginExecution();
parentExecution.setId( "testExecution" );
parent.addExecution( parentExecution );
Build parentContainer = new Build();
parentContainer.addPlugin( parent );
Plugin child = new Plugin();
child.setArtifactId( "testArtifact" );
child.setGroupId( "testGroup" );
child.setVersion( "1.0" );
PluginExecution childExecution = new PluginExecution();
childExecution.setId( "testExecution2" );
child.addExecution( childExecution );
Build childContainer = new Build();
childContainer.addPlugin( child );
ModelUtils.mergePluginLists( childContainer, parentContainer, true );
List plugins = childContainer.getPlugins();
assertEquals( 1, plugins.size() );
Plugin plugin = (Plugin) plugins.get( 0 );
assertEquals( 2, plugin.getExecutions().size() );
}
public void testShouldNOTMergeInheritedPluginHavingInheritEqualFalse() public void testShouldNOTMergeInheritedPluginHavingInheritEqualFalse()
{ {
Plugin parent = new Plugin(); Plugin parent = new Plugin();