This is related to
MNG-1499, but different, and, in my opinion, equally important. It makes sense that the order of plugin execution should be the same as it appears in the POM. For example, I have two plugins: one that generates a batch file and one that executes it. These plugins must run in order or the build will fail. However, the current implementation of ModelUtils.mergePluginLists does not respect the order of child plugins.
There is also a seperate bug in that the assembledPlugins map is being checked for the presence of child plugins before adding them to the mergedPlugins list, but nothing is ever added to assembledPlugins. So if a plugin exists in a parent and a child, it will end up appearing twice in the child's plugin list.
I have re-written this method to fix both these problems. See attached.
MNG-1891. Thus, it is fixed in 2.0.5.The attached patch is no longer relevant as several changes between 2.0.4 and 2.0.5 were merges from trunk and significantly altered the structure of the code.
I code reviewed the 2.0.5 implementation and believe it fixes this problem.
Given the nature of the bug – arbitrary – I don't think there is a reasonable way to write unit or integration tests. Suggest closing this bug as fixed.