diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java index 0289b308167e..50ac3f7c3ef4 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java @@ -40,7 +40,9 @@ import java.util.Properties; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; +import org.apache.maven.api.model.Exclusion; import org.apache.maven.api.model.InputSource; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; @@ -1680,9 +1682,29 @@ private DependencyManagement loadDependencyManagement( } } + // [MNG-5600] Dependency management import should support exclusions. + List exclusions = dependency.getDelegate().getExclusions(); + if (importMgmt != null && !exclusions.isEmpty()) { + // Dependency excluded from import. + List dependencies = importMgmt.getDependencies().stream() + .filter(candidate -> exclusions.stream().noneMatch(exclusion -> match(exclusion, candidate))) + .map(candidate -> candidate.withExclusions(exclusions)) + .collect(Collectors.toList()); + importMgmt = importMgmt.withDependencies(dependencies); + } + return importMgmt != null ? new DependencyManagement(importMgmt) : null; } + private boolean match(Exclusion exclusion, org.apache.maven.api.model.Dependency candidate) { + return match(exclusion.getGroupId(), candidate.getGroupId()) + && match(exclusion.getArtifactId(), candidate.getArtifactId()); + } + + private boolean match(String match, String text) { + return match.equals("*") || match.equals(text); + } + @SuppressWarnings("checkstyle:parameternumber") private DependencyManagement doLoadDependencyManagement( Model model,