Author: jdcasey Date: Mon Mar 17 18:09:26 2008 New Revision: 638160 URL: http://svn.apache.org/viewvc?rev=638160&view=rev Log: [MNG-3286] Fixing plugin-execution inherited flag functionality.
Added: maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/t12/ maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java (with props) maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/ maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/ maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/p1/ maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml (with props) maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/pom.xml (with props) Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java?rev=638160&r1=638159&r2=638160&view=diff ============================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java (original) +++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java Mon Mar 17 18:09:26 2008 @@ -51,16 +51,16 @@ import org.codehaus.plexus.util.xml.Xpp3Dom; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.TreeMap; -import java.util.HashMap; public final class ModelUtils { - + /** * Given this plugin list: * @@ -111,74 +111,74 @@ /** * This should be the resulting ordering of plugins after merging: - * + * * Given: - * + * * parent: X -> A -> B -> D -> E * child: Y -> A -> C -> D -> F - * - * Result: - * + * + * Result: + * * X -> Y -> A -> B -> C -> D -> E -> F */ public static void mergePluginLists( PluginContainer childContainer, PluginContainer parentContainer, boolean handleAsInheritance ) { - if ( childContainer == null || parentContainer == null ) + if ( ( childContainer == null ) || ( parentContainer == null ) ) { // nothing to do. return; } List parentPlugins = parentContainer.getPlugins(); - - if ( parentPlugins != null && !parentPlugins.isEmpty() ) + + if ( ( parentPlugins != null ) && !parentPlugins.isEmpty() ) { parentPlugins = new ArrayList( parentPlugins ); - - // If we're processing this merge as an inheritance, we have to build up a list of + + // If we're processing this merge as an inheritance, we have to build up a list of // plugins that were considered for inheritance. if ( handleAsInheritance ) { for ( Iterator it = parentPlugins.iterator(); it.hasNext(); ) { Plugin plugin = (Plugin) it.next(); - + String inherited = plugin.getInherited(); - - if ( inherited != null && !Boolean.valueOf( inherited ).booleanValue() ) + + if ( ( inherited != null ) && !Boolean.valueOf( inherited ).booleanValue() ) { it.remove(); } } } - + List assembledPlugins = new ArrayList(); Map childPlugins = childContainer.getPluginsAsMap(); - + for ( Iterator it = parentPlugins.iterator(); it.hasNext(); ) { Plugin parentPlugin = (Plugin) it.next(); String parentInherited = parentPlugin.getInherited(); - // only merge plugin definition from the parent if at least one + // 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() ) { Plugin childPlugin = (Plugin) childPlugins.get( parentPlugin.getKey() ); - if ( childPlugin != null && !assembledPlugins.contains( childPlugin ) ) + if ( ( childPlugin != null ) && !assembledPlugins.contains( childPlugin ) ) { Plugin assembledPlugin = childPlugin; mergePluginDefinitions( childPlugin, parentPlugin, handleAsInheritance ); - + // fix for MNG-2221 (assembly cache was not being populated for later reference): assembledPlugins.add( assembledPlugin ); } @@ -186,18 +186,18 @@ // 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 ) ) { parentPlugin.unsetInheritanceApplied(); } } - + // very important to use the parentPlugins List, rather than parentContainer.getPlugins() // since this list is a local one, and may have been modified during processing. List results = ModelUtils.orderAfterMerge( assembledPlugins, parentPlugins, childContainer.getPlugins() ); - - + + childContainer.setPlugins( results ); childContainer.flushPluginMap(); @@ -208,40 +208,40 @@ public static List orderAfterMerge( List merged, List highPrioritySource, List lowPrioritySource ) { List results = new ArrayList(); - + if ( !merged.isEmpty() ) { results.addAll( merged ); } - + List missingFromResults = new ArrayList(); - + List sources = new ArrayList(); - + sources.add( highPrioritySource ); sources.add( lowPrioritySource ); - + for ( Iterator sourceIterator = sources.iterator(); sourceIterator.hasNext(); ) { List source = (List) sourceIterator.next(); - + for ( Iterator it = source.iterator(); it.hasNext(); ) { Object item = it.next(); - + if ( results.contains( item ) ) { if ( !missingFromResults.isEmpty() ) { int idx = results.indexOf( item ); - + if ( idx < 0 ) { idx = 0; } - + results.addAll( idx, missingFromResults ); - + missingFromResults.clear(); } } @@ -250,21 +250,21 @@ missingFromResults.add( item ); } } - + if ( !missingFromResults.isEmpty() ) { results.addAll( missingFromResults ); - + missingFromResults.clear(); } } - + return results; } public static void mergeReportPluginLists( Reporting child, Reporting parent, boolean handleAsInheritance ) { - if ( child == null || parent == null ) + if ( ( child == null ) || ( parent == null ) ) { // nothing to do. return; @@ -272,7 +272,7 @@ List parentPlugins = parent.getPlugins(); - if ( parentPlugins != null && !parentPlugins.isEmpty() ) + if ( ( parentPlugins != null ) && !parentPlugins.isEmpty() ) { Map assembledPlugins = new TreeMap(); @@ -284,7 +284,7 @@ String parentInherited = parentPlugin.getInherited(); - if ( !handleAsInheritance || parentInherited == null || + if ( !handleAsInheritance || ( parentInherited == null ) || Boolean.valueOf( parentInherited ).booleanValue() ) { @@ -299,7 +299,7 @@ mergeReportPluginDefinitions( childPlugin, parentPlugin, handleAsInheritance ); } - if ( handleAsInheritance && parentInherited == null ) + if ( handleAsInheritance && ( parentInherited == null ) ) { assembledPlugin.unsetInheritanceApplied(); } @@ -326,7 +326,7 @@ public static void mergePluginDefinitions( Plugin child, Plugin parent, boolean handleAsInheritance ) { - if ( child == null || parent == null ) + if ( ( child == null ) || ( parent == null ) ) { // nothing to do. return; @@ -337,7 +337,7 @@ child.setExtensions( true ); } - if ( child.getVersion() == null && parent.getVersion() != null ) + if ( ( child.getVersion() == null ) && ( parent.getVersion() != null ) ) { child.setVersion( parent.getVersion() ); } @@ -354,14 +354,14 @@ // 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(); + boolean parentIsInherited = ( parentInherited == null ) || Boolean.valueOf( parentInherited ).booleanValue(); List parentExecutions = parent.getExecutions(); - if ( parentExecutions != null && !parentExecutions.isEmpty() ) + if ( ( parentExecutions != null ) && !parentExecutions.isEmpty() ) { List mergedExecutions = new ArrayList(); - + Map assembledExecutions = new TreeMap(); Map childExecutions = child.getExecutionsAsMap(); @@ -370,7 +370,11 @@ { PluginExecution parentExecution = (PluginExecution) it.next(); - if ( !handleAsInheritance || parentIsInherited ) + String inherited = parentExecution.getInherited(); + + boolean parentExecInherited = parentIsInherited && ( ( inherited == null ) || Boolean.valueOf( inherited ).booleanValue() ); + + if ( !handleAsInheritance || parentExecInherited ) { PluginExecution assembled = parentExecution; @@ -382,7 +386,7 @@ assembled = childExecution; } - else if ( handleAsInheritance && parentInherited == null ) + else if ( handleAsInheritance && ( parentInherited == null ) ) { parentExecution.unsetInheritanceApplied(); } @@ -412,13 +416,13 @@ public static void mergeReportPluginDefinitions( ReportPlugin child, ReportPlugin parent, boolean handleAsInheritance ) { - if ( child == null || parent == null ) + if ( ( child == null ) || ( parent == null ) ) { // nothing to do. return; } - if ( child.getVersion() == null && parent.getVersion() != null ) + if ( ( child.getVersion() == null ) && ( parent.getVersion() != null ) ) { child.setVersion( parent.getVersion() ); } @@ -426,11 +430,11 @@ // 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(); + boolean parentIsInherited = ( parentInherited == null ) || Boolean.valueOf( parentInherited ).booleanValue(); List parentReportSets = parent.getReportSets(); - if ( parentReportSets != null && !parentReportSets.isEmpty() ) + if ( ( parentReportSets != null ) && !parentReportSets.isEmpty() ) { Map assembledReportSets = new TreeMap(); @@ -452,7 +456,7 @@ assembledReportSet = childReportSet; } - else if ( handleAsInheritance && parentInherited == null ) + else if ( handleAsInheritance && ( parentInherited == null ) ) { parentReportSet.unsetInheritanceApplied(); } @@ -492,7 +496,7 @@ List goals = new ArrayList(); - if ( childGoals != null && !childGoals.isEmpty() ) + if ( ( childGoals != null ) && !childGoals.isEmpty() ) { goals.addAll( childGoals ); } @@ -527,7 +531,7 @@ List reports = new ArrayList(); - if ( childReports != null && !childReports.isEmpty() ) + if ( ( childReports != null ) && !childReports.isEmpty() ) { reports.addAll( childReports ); } @@ -616,7 +620,7 @@ List modules = profile.getModules(); - if ( modules != null && !modules.isEmpty() ) + if ( ( modules != null ) && !modules.isEmpty() ) { newProfile.setModules( new ArrayList( modules ) ); } @@ -1010,7 +1014,7 @@ List goals = exec.getGoals(); - if ( goals != null && !goals.isEmpty() ) + if ( ( goals != null ) && !goals.isEmpty() ) { newExec.setGoals( new ArrayList( goals ) ); } Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java?rev=638160&r1=638159&r2=638160&view=diff ============================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java (original) +++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java Mon Mar 17 18:09:26 2008 @@ -33,7 +33,6 @@ import org.codehaus.plexus.util.StringUtils; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; @@ -336,13 +335,13 @@ ModelUtils.mergeFilterLists( childBuild.getFilters(), parentBuild.getFilters() ); List resources = childBuild.getResources(); - if ( resources == null || resources.isEmpty() ) + if ( ( resources == null ) || resources.isEmpty() ) { childBuild.setResources( parentBuild.getResources() ); } resources = childBuild.getTestResources(); - if ( resources == null || resources.isEmpty() ) + if ( ( resources == null ) || resources.isEmpty() ) { childBuild.setTestResources( parentBuild.getTestResources() ); } @@ -354,8 +353,9 @@ PluginManagement dominantPM = childBuild.getPluginManagement(); PluginManagement recessivePM = parentBuild.getPluginManagement(); - if ( dominantPM == null && recessivePM != null ) + if ( ( dominantPM == null ) && ( recessivePM != null ) ) { + // FIXME: Filter out the inherited == false stuff! childBuild.setPluginManagement( recessivePM ); } else @@ -494,10 +494,14 @@ if ( appendPaths ) { if ( pathAdjustment != null ) + { uncleanPath += "/" + pathAdjustment; + } if ( childPath != null ) + { uncleanPath += "/" + childPath; + } } String cleanedPath = ""; @@ -511,7 +515,9 @@ } if ( uncleanPath.startsWith( "/" ) ) + { cleanedPath += "/"; + } return cleanedPath + resolvePath( uncleanPath ); } @@ -525,7 +531,7 @@ while ( tokenizer.hasMoreTokens() ) { - String token = (String) tokenizer.nextToken(); + String token = tokenizer.nextToken(); if ( token.equals( "" ) ) { @@ -557,7 +563,9 @@ { cleanedPath.append( pathElements.removeFirst() ); if ( !pathElements.isEmpty() ) + { cleanedPath.append( '/' ); + } } return cleanedPath.toString(); Modified: maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java?rev=638160&r1=638159&r2=638160&view=diff ============================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java (original) +++ maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ModelUtilsTest.java Mon Mar 17 18:09:26 2008 @@ -19,13 +19,11 @@ * under the License. */ -import junit.framework.TestCase; - import org.apache.maven.model.Build; +import org.apache.maven.model.Dependency; import org.apache.maven.model.Plugin; import org.apache.maven.model.PluginContainer; import org.apache.maven.model.PluginExecution; -import org.apache.maven.model.Dependency; import org.codehaus.plexus.util.xml.Xpp3Dom; import java.util.Collections; @@ -33,10 +31,12 @@ import java.util.List; import java.util.Map; +import junit.framework.TestCase; + public class ModelUtilsTest extends TestCase { - + public void testShouldUseMainPluginDependencyVersionOverManagedDepVersion() { Plugin mgtPlugin = createPlugin( "group", "artifact", "1", Collections.EMPTY_MAP ); @@ -67,104 +67,104 @@ public void testShouldNotInheritPluginWithInheritanceSetToFalse() { PluginContainer parent = new PluginContainer(); - + Plugin parentPlugin = createPlugin( "group", "artifact", "1.0", Collections.EMPTY_MAP ); parentPlugin.setInherited( "false" ); - + parent.addPlugin( parentPlugin ); - + PluginContainer child = new PluginContainer(); - + child.addPlugin( createPlugin( "group3", "artifact3", "1.0", Collections.EMPTY_MAP ) ); - + ModelUtils.mergePluginLists( child, parent, true ); - + List results = child.getPlugins(); - + assertEquals( 1, results.size() ); - + Plugin result1 = (Plugin) results.get( 0 ); assertEquals( "group3", result1.getGroupId() ); assertEquals( "artifact3", result1.getArtifactId() ); } - + /** * Test that this is the resulting ordering of plugins after merging: - * + * * Given: - * + * * parent: X -> A -> B -> D -> E * child: Y -> A -> C -> D -> F - * - * Result: - * + * + * Result: + * * X -> Y -> A -> B -> C -> D -> E -> F */ public void testShouldPreserveChildOrderingOfPluginsAfterParentMerge() { PluginContainer parent = new PluginContainer(); - + parent.addPlugin( createPlugin( "group", "artifact", "1.0", Collections.EMPTY_MAP ) ); parent.addPlugin( createPlugin( "group2", "artifact2", "1.0", Collections.singletonMap( "key", "value" ) ) ); - + PluginContainer child = new PluginContainer(); - + child.addPlugin( createPlugin( "group3", "artifact3", "1.0", Collections.EMPTY_MAP ) ); child.addPlugin( createPlugin( "group2", "artifact2", "1.0", Collections.singletonMap( "key2", "value2" ) ) ); - + ModelUtils.mergePluginLists( child, parent, true ); - + List results = child.getPlugins(); - + assertEquals( 3, results.size() ); - + Plugin result1 = (Plugin) results.get( 0 ); - + assertEquals( "group", result1.getGroupId() ); assertEquals( "artifact", result1.getArtifactId() ); - + Plugin result2 = (Plugin) results.get( 1 ); - + assertEquals( "group3", result2.getGroupId() ); assertEquals( "artifact3", result2.getArtifactId() ); - + Plugin result3 = (Plugin) results.get( 2 ); - + assertEquals( "group2", result3.getGroupId() ); assertEquals( "artifact2", result3.getArtifactId() ); - + Xpp3Dom result3Config = (Xpp3Dom) result3.getConfiguration(); - + assertNotNull( result3Config ); - + assertEquals( "value", result3Config.getChild( "key" ).getValue() ); assertEquals( "value2", result3Config.getChild( "key2" ).getValue() ); } - + private Plugin createPlugin( String groupId, String artifactId, String version, Map configuration ) { Plugin plugin = new Plugin(); plugin.setGroupId( groupId ); plugin.setArtifactId( artifactId ); plugin.setVersion( version ); - + Xpp3Dom config = new Xpp3Dom( "configuration" ); - + if( configuration != null ) { for ( Iterator it = configuration.entrySet().iterator(); it.hasNext(); ) { Map.Entry entry = (Map.Entry) it.next(); - + Xpp3Dom param = new Xpp3Dom( String.valueOf( entry.getKey() ) ); param.setValue( String.valueOf( entry.getValue() ) ); - + config.addChild( param ); } } - + plugin.setConfiguration( config ); - + return plugin; } @@ -228,7 +228,7 @@ parentExecution.setId( "testExecution" ); parent.addExecution( parentExecution ); - + Build parentContainer = new Build(); parentContainer.addPlugin( parent ); @@ -236,18 +236,18 @@ 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() ); } @@ -262,7 +262,7 @@ parentExecution.setId( "testExecution" ); parent.addExecution( parentExecution ); - + Build parentContainer = new Build(); parentContainer.addPlugin( parent ); @@ -276,18 +276,18 @@ 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() ); } @@ -455,4 +455,125 @@ assertEquals( 2, ((Plugin)first.getPlugins().get( 0 ) ).getDependencies().size() ); } + + public void testShouldNotMergePluginExecutionWhenExecInheritedIsFalseAndTreatAsInheritanceIsTrue() + { + String gid = "group"; + String aid = "artifact"; + String ver = "1"; + + PluginContainer parent = new PluginContainer(); + Plugin pParent = createPlugin( gid, aid, ver, Collections.EMPTY_MAP ); + + pParent.setInherited( Boolean.toString( true ) ); + + PluginExecution eParent = new PluginExecution(); + + String testId = "test"; + + eParent.setId( testId ); + eParent.addGoal( "run" ); + eParent.setPhase( "initialize" ); + eParent.setInherited( Boolean.toString( false ) ); + + pParent.addExecution( eParent ); + parent.addPlugin( pParent ); + + PluginContainer child = new PluginContainer(); + Plugin pChild = createPlugin( gid, aid, ver, Collections.EMPTY_MAP ); + PluginExecution eChild = new PluginExecution(); + + eChild.setId( "child-specified" ); + eChild.addGoal( "child" ); + eChild.setPhase( "compile" ); + + pChild.addExecution( eChild ); + child.addPlugin( pChild ); + + ModelUtils.mergePluginDefinitions( pChild, pParent, true ); + + Map executionMap = pChild.getExecutionsAsMap(); + assertNull( "test execution should not be inherited from parent.", executionMap.get( testId ) ); + } + + public void testShouldNotMergePluginExecutionWhenPluginInheritedIsFalseAndTreatAsInheritanceIsTrue() + { + String gid = "group"; + String aid = "artifact"; + String ver = "1"; + + PluginContainer parent = new PluginContainer(); + Plugin pParent = createPlugin( gid, aid, ver, Collections.EMPTY_MAP ); + + pParent.setInherited( Boolean.toString( false ) ); + + PluginExecution eParent = new PluginExecution(); + + String testId = "test"; + + eParent.setId( testId ); + eParent.addGoal( "run" ); + eParent.setPhase( "initialize" ); + eParent.setInherited( Boolean.toString( true ) ); + + pParent.addExecution( eParent ); + parent.addPlugin( pParent ); + + PluginContainer child = new PluginContainer(); + Plugin pChild = createPlugin( gid, aid, ver, Collections.EMPTY_MAP ); + PluginExecution eChild = new PluginExecution(); + + eChild.setId( "child-specified" ); + eChild.addGoal( "child" ); + eChild.setPhase( "compile" ); + + pChild.addExecution( eChild ); + child.addPlugin( pChild ); + + ModelUtils.mergePluginDefinitions( pChild, pParent, true ); + + Map executionMap = pChild.getExecutionsAsMap(); + assertNull( "test execution should not be inherited from parent.", executionMap.get( testId ) ); + } + + public void testShouldMergePluginExecutionWhenExecInheritedIsTrueAndTreatAsInheritanceIsTrue() + { + String gid = "group"; + String aid = "artifact"; + String ver = "1"; + + PluginContainer parent = new PluginContainer(); + Plugin pParent = createPlugin( gid, aid, ver, Collections.EMPTY_MAP ); + + pParent.setInherited( Boolean.toString( true ) ); + + PluginExecution eParent = new PluginExecution(); + + String testId = "test"; + + eParent.setId( testId ); + eParent.addGoal( "run" ); + eParent.setPhase( "initialize" ); + eParent.setInherited( Boolean.toString( true ) ); + + pParent.addExecution( eParent ); + parent.addPlugin( pParent ); + + PluginContainer child = new PluginContainer(); + Plugin pChild = createPlugin( gid, aid, ver, Collections.EMPTY_MAP ); + PluginExecution eChild = new PluginExecution(); + + eChild.setId( "child-specified" ); + eChild.addGoal( "child" ); + eChild.setPhase( "compile" ); + + pChild.addExecution( eChild ); + child.addPlugin( pChild ); + + ModelUtils.mergePluginDefinitions( pChild, pParent, true ); + + Map executionMap = pChild.getExecutionsAsMap(); + assertNotNull( "test execution should be inherited from parent.", executionMap.get( testId ) ); + } + } Modified: maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java?rev=638160&r1=638159&r2=638160&view=diff ============================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java (original) +++ maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java Mon Mar 17 18:09:26 2008 @@ -19,7 +19,6 @@ * under the License. */ -import junit.framework.TestCase; import org.apache.maven.model.Build; import org.apache.maven.model.Dependency; import org.apache.maven.model.DependencyManagement; @@ -45,6 +44,8 @@ import java.util.List; import java.util.Map; +import junit.framework.TestCase; + /** * @author jdcasey */ @@ -52,129 +53,129 @@ extends TestCase { private ModelInheritanceAssembler assembler = new DefaultModelInheritanceAssembler(); - + public void testShouldAdjustChildUrlBasedOnParentAndModulePathInSiblingDir() { Model parent = makeBaseModel( "parent" ); - + parent.setUrl( "http://www.google.com/parent" ); - + Model child = makeBaseModel( "child" ); - + // TODO: this is probably what we should be appending... // child.setUrl( "/child.dir" ); - + parent.addModule( "../child" ); - + assembler.assembleModelInheritance( child, parent, ".." ); - + String resultingUrl = child.getUrl(); - + System.out.println( resultingUrl ); - + assertEquals( "http://www.google.com/child", resultingUrl ); } - + public void testShouldAdjustPathsThreeLevelsDeepAncestryInRepoAndNonStandardModulePaths() { Model top = makeBaseModel( "top" ); - + top.setUrl( "http://www.google.com/top" ); - + Model middle = makeBaseModel( "middle" ); - + top.addModule( "../middle" ); - + Model bottom = makeBaseModel( "bottom" ); - + middle.addModule( "../bottom" ); - + assembler.assembleModelInheritance( middle, top, ".." ); assembler.assembleModelInheritance( bottom, middle, ".." ); - + String resultingUrl = bottom.getUrl(); - + System.out.println( resultingUrl ); - + assertEquals( "http://www.google.com/bottom", resultingUrl ); } - + public void testShouldMergeSuccessiveDependencyManagementSectionsOverThreeLevels() { Model top = makeBaseModel( "top" ); - + DependencyManagement topMgmt = new DependencyManagement(); - + topMgmt.addDependency( makeDep( "top-dep" ) ); - + top.setDependencyManagement( topMgmt ); - + Model mid = makeBaseModel( "mid" ); - + DependencyManagement midMgmt = new DependencyManagement(); - + midMgmt.addDependency( makeDep( "mid-dep" ) ); - + mid.setDependencyManagement( midMgmt ); - + Model bottom = makeBaseModel( "bottom" ); - + DependencyManagement bottomMgmt = new DependencyManagement(); - + bottomMgmt.addDependency( makeDep( "bottom-dep" ) ); - + bottom.setDependencyManagement( bottomMgmt ); - + assembler.assembleModelInheritance( mid, top ); - + assembler.assembleModelInheritance( bottom, mid ); - + DependencyManagement result = bottom.getDependencyManagement(); - + List resultDeps = result.getDependencies(); - + assertEquals( 3, resultDeps.size() ); } - + public void testShouldMergeDependencyManagementSectionsFromTopTwoLevelsToBottomLevel() { Model top = makeBaseModel( "top" ); - + DependencyManagement topMgmt = new DependencyManagement(); - + topMgmt.addDependency( makeDep( "top-dep" ) ); - + top.setDependencyManagement( topMgmt ); - + Model mid = makeBaseModel( "mid" ); - + DependencyManagement midMgmt = new DependencyManagement(); - + midMgmt.addDependency( makeDep( "mid-dep" ) ); - + mid.setDependencyManagement( midMgmt ); - + Model bottom = makeBaseModel( "bottom" ); - + assembler.assembleModelInheritance( mid, top ); - + assembler.assembleModelInheritance( bottom, mid ); - + DependencyManagement result = bottom.getDependencyManagement(); - + List resultDeps = result.getDependencies(); - + assertEquals( 2, resultDeps.size() ); } - + private Dependency makeDep( String artifactId ) { Dependency dep = new Dependency(); - + dep.setGroupId( "maven" ); dep.setArtifactId( artifactId ); dep.setVersion( "1.0" ); - + return dep; } @@ -590,7 +591,7 @@ { Build childBuild = child.getBuild(); - if ( expectedPlugins != null && !expectedPlugins.isEmpty() ) + if ( ( expectedPlugins != null ) && !expectedPlugins.isEmpty() ) { assertNotNull( childBuild ); @@ -616,7 +617,7 @@ } else { - assertTrue( childBuild == null || childBuild.getPlugins() == null || childBuild.getPlugins().isEmpty() ); + assertTrue( ( childBuild == null ) || ( childBuild.getPlugins() == null ) || childBuild.getPlugins().isEmpty() ); } } @@ -628,9 +629,9 @@ List referenceExecutions = reference.getExecutions(); Map testExecutionsMap = test.getExecutionsAsMap(); - if ( referenceExecutions != null && !referenceExecutions.isEmpty() ) + if ( ( referenceExecutions != null ) && !referenceExecutions.isEmpty() ) { - assertTrue( "Missing goals specification", ( testExecutionsMap != null && !testExecutionsMap.isEmpty() ) ); + assertTrue( "Missing goals specification", ( ( testExecutionsMap != null ) && !testExecutionsMap.isEmpty() ) ); for ( Iterator it = referenceExecutions.iterator(); it.hasNext(); ) { @@ -648,7 +649,7 @@ else { assertTrue( "Unexpected goals specification", - ( testExecutionsMap == null || testExecutionsMap.isEmpty() ) ); + ( ( testExecutionsMap == null ) || testExecutionsMap.isEmpty() ) ); } } @@ -746,11 +747,129 @@ assertReports( new ArrayList(), child ); } + public void testPluginExecInheritanceWhereExecInheritedSetToFalse() + { + String testId = "test"; + String gid = "group"; + String aid = "artifact"; + String ver = "1"; + + Model child = makeBaseModel( "child" ); + + Plugin pChild = new Plugin(); + pChild.setGroupId( gid ); + pChild.setArtifactId( aid ); + pChild.setVersion( ver ); + + PluginExecution eChild = new PluginExecution(); + eChild.setId( "normal" ); + eChild.addGoal( "run" ); + + pChild.addExecution( eChild ); + + Build bChild = new Build(); + bChild.addPlugin( pChild ); + + child.setBuild( bChild ); + + Model parent = makeBaseModel( "parent" ); + + Plugin pParent = new Plugin(); + pParent.setGroupId( gid ); + pParent.setArtifactId( aid ); + pParent.setVersion( ver ); + + pParent.setInherited( Boolean.toString( true ) ); + + PluginExecution eParent = new PluginExecution(); + eParent.setId( testId ); + eParent.addGoal( "test" ); + eParent.setInherited( Boolean.toString( false ) ); + + pParent.addExecution( eParent ); + + Build bParent = new Build(); + bParent.addPlugin( pParent ); + + parent.setBuild( bParent ); + + assembler.assembleModelInheritance( child, parent ); + + Map pluginMap = bChild.getPluginsAsMap(); + assertNotNull( pluginMap ); + + Plugin plugin = (Plugin) pluginMap.get( gid + ":" + aid ); + assertNotNull( plugin ); + + Map executionMap = plugin.getExecutionsAsMap(); + assertNotNull( executionMap ); + + assertNull( "test execution with inherited == false should NOT be inherited to child model.", executionMap.get( testId ) ); + } + + public void testPluginExecInheritanceWhereExecInheritedSetToFalseAndPluginInheritedNotSet() + { + String testId = "test"; + String gid = "group"; + String aid = "artifact"; + String ver = "1"; + + Model child = makeBaseModel( "child" ); + + Plugin pChild = new Plugin(); + pChild.setGroupId( gid ); + pChild.setArtifactId( aid ); + pChild.setVersion( ver ); + + PluginExecution eChild = new PluginExecution(); + eChild.setId( "normal" ); + eChild.addGoal( "run" ); + + pChild.addExecution( eChild ); + + Build bChild = new Build(); + bChild.addPlugin( pChild ); + + child.setBuild( bChild ); + + Model parent = makeBaseModel( "parent" ); + + Plugin pParent = new Plugin(); + pParent.setGroupId( gid ); + pParent.setArtifactId( aid ); + pParent.setVersion( ver ); + + PluginExecution eParent = new PluginExecution(); + eParent.setId( testId ); + eParent.addGoal( "test" ); + eParent.setInherited( Boolean.toString( false ) ); + + pParent.addExecution( eParent ); + + Build bParent = new Build(); + bParent.addPlugin( pParent ); + + parent.setBuild( bParent ); + + assembler.assembleModelInheritance( child, parent ); + + Map pluginMap = bChild.getPluginsAsMap(); + assertNotNull( pluginMap ); + + Plugin plugin = (Plugin) pluginMap.get( gid + ":" + aid ); + assertNotNull( plugin ); + + Map executionMap = plugin.getExecutionsAsMap(); + assertNotNull( executionMap ); + + assertNull( "test execution with inherited == false should NOT be inherited to child model.", executionMap.get( testId ) ); + } + private void assertReports( List expectedPlugins, Model child ) { Reporting childBuild = child.getReporting(); - if ( expectedPlugins != null && !expectedPlugins.isEmpty() ) + if ( ( expectedPlugins != null ) && !expectedPlugins.isEmpty() ) { assertNotNull( childBuild ); @@ -776,7 +895,7 @@ } else { - assertTrue( childBuild == null || childBuild.getPlugins() == null || childBuild.getPlugins().isEmpty() ); + assertTrue( ( childBuild == null ) || ( childBuild.getPlugins() == null ) || childBuild.getPlugins().isEmpty() ); } } @@ -788,9 +907,9 @@ List referenceReportSets = reference.getReportSets(); Map testReportSetsMap = test.getReportSetsAsMap(); - if ( referenceReportSets != null && !referenceReportSets.isEmpty() ) + if ( ( referenceReportSets != null ) && !referenceReportSets.isEmpty() ) { - assertTrue( "Missing goals specification", ( testReportSetsMap != null && !testReportSetsMap.isEmpty() ) ); + assertTrue( "Missing goals specification", ( ( testReportSetsMap != null ) && !testReportSetsMap.isEmpty() ) ); for ( Iterator it = referenceReportSets.iterator(); it.hasNext(); ) { @@ -808,7 +927,7 @@ else { assertTrue( "Unexpected goals specification", - ( testReportSetsMap == null || testReportSetsMap.isEmpty() ) ); + ( ( testReportSetsMap == null ) || testReportSetsMap.isEmpty() ) ); } } @@ -851,7 +970,7 @@ { Model model = makeBaseModel( artifactId ); - if ( connection != null || developerConnection != null || url != null ) + if ( ( connection != null ) || ( developerConnection != null ) || ( url != null ) ) { Scm scm = new Scm(); Added: maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java?rev=638160&view=auto ============================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java (added) +++ maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java Mon Mar 17 18:09:26 2008 @@ -0,0 +1,65 @@ +package org.apache.maven.project.inheritance.t12; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.model.Plugin; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase; + +import java.io.File; +import java.util.Map; + +/** + * Verifies that plugin execution sections in the parent POM that have + * inherit == false are not inherited to the child POM. + */ +public class ProjectInheritanceTest extends AbstractProjectInheritanceTestCase +{ + // ---------------------------------------------------------------------- + // + // p1 inherits from p0 + // p0 inherits from super model + // + // or we can show it graphically as: + // + // p1 ---> p0 --> super model + // + // ---------------------------------------------------------------------- + + public void testFalsePluginExecutionInheritValue() throws Exception + { + File localRepo = getLocalRepositoryPath(); + + File pom0 = new File( localRepo, "p0/pom.xml" ); + File pom0Basedir = pom0.getParentFile(); + File pom1 = new File( pom0Basedir, "p1/pom.xml" ); + + getProjectWithDependencies( pom0 ); + MavenProject project1 = getProjectWithDependencies( pom1 ); + + Map pluginMap = project1.getBuild().getPluginsAsMap(); + Plugin compilerPlugin = (Plugin) pluginMap.get( "org.apache.maven.plugins:maven-compiler-plugin" ); + + assertNotNull( compilerPlugin ); + + Map executionMap = compilerPlugin.getExecutionsAsMap(); + assertNull( "Plugin execution: \'test\' should NOT exist in the compiler plugin specification for the child project!", executionMap.get( "test" ) ); + } +} \ No newline at end of file Propchange: maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml?rev=638160&view=auto ============================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml (added) +++ maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml Mon Mar 17 18:09:26 2008 @@ -0,0 +1,29 @@ +<project> + <parent> + <artifactId>p0</artifactId> + <groupId>maven</groupId> + <version>1.0</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <artifactId>p1</artifactId> + <packaging>jar</packaging> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <executions> + <execution> + <id>normal</id> + + <goals> + <goal>compile</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> \ No newline at end of file Propchange: maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/pom.xml URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/pom.xml?rev=638160&view=auto ============================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/pom.xml (added) +++ maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/pom.xml Mon Mar 17 18:09:26 2008 @@ -0,0 +1,30 @@ +<project> + <modelVersion>4.0.0</modelVersion> + <groupId>maven</groupId> + <artifactId>p0</artifactId> + <packaging>pom</packaging> + <version>1.0</version> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <executions> + <execution> + <id>test</id> + + <!-- The key to this test... --> + <inherited>false</inherited> + + <goals> + <goal>compile</goal> + </goals> + <phase>install</phase> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> \ No newline at end of file Propchange: maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/branches/maven-2.0.x/maven-project/src/test/resources/inheritance-repo/t12/p0/pom.xml ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision"