This bug is similar to
http://jira.codehaus.org/browse/MANTRUN-57;jsessionid=awtyLFBPEQN6vVmwu4
- the difference being the plugins are not correctly merged.
In the parent's POM, the following was defined:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<downloadSources>true</downloadSources>
<additionalBuildcommands>
<buildcommand>
parentBuildCommand
</buildcommand>
</additionalBuildcommands>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
in the child's POM, the following was defined.
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<additionalBuildcommands>
<buildcommand>
childBuildCommand
</buildcommand>
</additionalBuildcommands>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
I expect the effective POM to look like this:
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<additionalBuildcommands>
<buildcommand>
parentBuildCommand
</buildcommand>
<buildcommand>
childBuildCommand
</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
Outside of the common problem of the <plugin> element being duplicated, here's the issue this bug is trying to address:
In the effective pom, the the <downloadSources> element was correctly merged, however, the <buildCommand> element was not. It seems like the merging only correctly happens down to a given level.
I noticed that http://jira.codehaus.org/browse/MNG-2297;jsessionid=awtyLFBPEQN6vVmwu4
has a patch attached, so this may be fixed in 2.0.5, I just wanted to raise the use case in case that patch did not address this specific problem.
I'm attaching the POMs needed to reproduce the problem and the effective POM for the child.
We've solved this problem using an attribute, 'combine.children'. You simply specify this attribute, with the value of "append" at the parent element where such aggregation should occur, and Maven will switch its merge behavior for that element's children.
NOTE: I fixed this behavior in Maven's trunk; previously, it had been putting the parent POM's sub-elements AFTER those of the child. This is inconsistent with other inheritance functions, so I've reversed the ordering to truly append the child's elements.
So, to recap:
parent:
child:
result:
(If you're using an earlier version of Maven than the present trunk, order will be three, one, two.)
Revision IDs affecting this change are:
plexus-utils: revId 6546
maven-project: revId 513038
I also added a couple unit tests to org.apache.maven.project.ModelUtilsTest in maven-project/src/test/java to cover these cases.