diff --git a/maven-core/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java b/maven-core/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java index 218583f787..ba5fa5df85 100644 --- a/maven-core/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java +++ b/maven-core/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java @@ -18,6 +18,7 @@ */ import org.apache.maven.model.Dependency; +import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.Model; import org.apache.maven.model.Plugin; import org.apache.maven.model.PostGoal; @@ -26,8 +27,11 @@ import org.apache.maven.model.Scm; import org.codehaus.plexus.util.StringUtils; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.TreeMap; /** * @author Jason van Zyl @@ -322,5 +326,38 @@ public void assembleModelInheritance( Model child, Model parent ) child.addPlugin( plugin ); } } + + DependencyManagement parentDepMgmt = parent.getDependencyManagement(); + DependencyManagement childDepMgmt = child.getDependencyManagement(); + if(parentDepMgmt != null) + { + if(childDepMgmt == null) + { + child.setDependencyManagement(parentDepMgmt); + } + else + { + List parentDeps = parentDepMgmt.getDependencies(); + + Map mappedParentDeps = new TreeMap(); + for ( Iterator it = parentDeps.iterator(); it.hasNext(); ) + { + Dependency dep = (Dependency) it.next(); + mappedParentDeps.put(dep.getManagementKey(), dep); + } + + List deps = new ArrayList(parentDeps); + for ( Iterator it = childDepMgmt.getDependencies().iterator(); it.hasNext(); ) + { + Dependency dep = (Dependency) it.next(); + if(!mappedParentDeps.containsKey(dep.getManagementKey())) + { + deps.add(dep); + } + } + + childDepMgmt.setDependencies(deps); + } + } } }