diff --git a/maven-project/src/main/java/org/apache/maven/project/processor/BuildProcessor.java b/maven-project/src/main/java/org/apache/maven/project/processor/BuildProcessor.java index 86963ab88d..13faf89338 100644 --- a/maven-project/src/main/java/org/apache/maven/project/processor/BuildProcessor.java +++ b/maven-project/src/main/java/org/apache/maven/project/processor/BuildProcessor.java @@ -25,6 +25,7 @@ import java.util.List; import org.apache.maven.model.Build; import org.apache.maven.model.BuildBase; +import org.apache.maven.model.Dependency; import org.apache.maven.model.Extension; import org.apache.maven.model.Model; import org.apache.maven.model.Plugin; @@ -205,15 +206,50 @@ public class BuildProcessor if(source.getTestSourceDirectory() != null) { target.setTestSourceDirectory( source.getTestSourceDirectory() ); - } - + } + /* + List childDependencies = + new ArrayList(dependencies.subList( length - 1 , dependencies.size() ) ); + dependencies.removeAll( childDependencies ); + dependencies.addAll( 0, childDependencies ); + */ + int i = target.getExtensions().size(); + + List m = new ArrayList(); for(Extension extension : source.getExtensions()) { - Extension e = new Extension(); - e.setArtifactId( extension.getArtifactId() ); - e.setGroupId( extension.getGroupId() ); - e.setVersion( extension.getVersion() ); - target.addExtension( e ); - } + Extension match = isMatch(extension, target.getExtensions()); + if(match != null) + { + match.setArtifactId( extension.getArtifactId() ); + match.setGroupId( extension.getGroupId() ); + match.setVersion( extension.getVersion() ); + m.add( match ); + } + else + { + Extension e = new Extension(); + e.setArtifactId( extension.getArtifactId() ); + e.setGroupId( extension.getGroupId() ); + e.setVersion( extension.getVersion() ); + m.add( e ); + // target.addExtension( e ); + } + } + target.getExtensions().removeAll( m ); + target.getExtensions().addAll( 0, m ); } + + private static Extension isMatch(Extension extension, List extensions) + { + for(Extension e : extensions) + { + if(e.getGroupId().equals( extension.getGroupId() ) && e.getArtifactId().equals( extension.getArtifactId() )) + { + return e; + } + } + return null; + } + } diff --git a/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java b/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java index 6c47ef59c9..b8d33f476e 100644 --- a/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java +++ b/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java @@ -1244,6 +1244,19 @@ public class PomConstructionTest PomTestWrapper pom = buildPom( "boolean-interpolation" ); } */ + + /* MNG-3899 */ + public void testBuildExtensionInheritance() + throws Exception + { + PomTestWrapper pom = buildPom( "build-extension-inheritance/sub" ); + System.out.println(pom.getDomainModel().asString()); + assertEquals(3, ( (List) pom.getValue( "build/extensions" )).size() ); + assertEquals("b", pom.getValue( "build/extensions[1]/artifactId" ) ); + assertEquals("a", pom.getValue( "build/extensions[2]/artifactId" ) ); + assertEquals("0.2", pom.getValue( "build/extensions[2]/version" ) ); + assertEquals("c", pom.getValue( "build/extensions[3]/artifactId" ) ); + } private void assertPathSuffixEquals( String expected, Object actual ) { diff --git a/maven-project/src/test/resources-project-builder/build-extension-inheritance/pom.xml b/maven-project/src/test/resources-project-builder/build-extension-inheritance/pom.xml new file mode 100644 index 0000000000..2d95cb1c5d --- /dev/null +++ b/maven-project/src/test/resources-project-builder/build-extension-inheritance/pom.xml @@ -0,0 +1,49 @@ + + + + + + 4.0.0 + + org.apache.maven.its.mng3899 + parent + 0.1 + pom + + Maven Integration Test :: MNG-3899 + + Test that build extensions are properly merged during inheritance. + + + + + + org.apache.maven.its.mng3899 + a + 0.1 + + + org.apache.maven.its.mng3899 + c + 0.1 + + + + diff --git a/maven-project/src/test/resources-project-builder/build-extension-inheritance/sub/pom.xml b/maven-project/src/test/resources-project-builder/build-extension-inheritance/sub/pom.xml new file mode 100644 index 0000000000..4411b8929f --- /dev/null +++ b/maven-project/src/test/resources-project-builder/build-extension-inheritance/sub/pom.xml @@ -0,0 +1,75 @@ + + + + + + 4.0.0 + + + org.apache.maven.its.mng3899 + parent + 0.1 + + + child + + Maven Integration Test :: MNG-3899 + + Test that build extensions are properly merged during inheritance. + + + + + + + org.apache.maven.its.mng3899 + b + 0.1 + + + + org.apache.maven.its.mng3899 + a + 0.2 + + + + + org.apache.maven.its.plugins + maven-it-plugin-expression + 2.1-SNAPSHOT + + + validate + + eval + + + target/extension.properties + + project/build/extensions + + + + + + + +