[MNG-5600] Dependency management import should support exclusions.
Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/aa0abff9 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/aa0abff9 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/aa0abff9 Branch: refs/heads/DEPMGMT-IMPORT Commit: aa0abff932f18120b7d256655205fa898f770c67 Parents: 9465aa6 Author: Christian Schulte <schu...@apache.org> Authored: Sun Jun 19 16:32:25 2016 +0200 Committer: Christian Schulte <schu...@apache.org> Committed: Wed Mar 8 18:36:06 2017 +0100 ---------------------------------------------------------------------- .../model/building/DefaultModelBuilder.java | 57 +++++++++++++++----- 1 file changed, 45 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/aa0abff9/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java ---------------------------------------------------------------------- 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 e3beb2c..6d0b4a9 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 @@ -19,6 +19,16 @@ package org.apache.maven.model.building; * under the License. */ +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Properties; import org.apache.commons.lang3.Validate; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; @@ -28,6 +38,7 @@ import org.apache.maven.model.Activation; import org.apache.maven.model.Build; import org.apache.maven.model.Dependency; import org.apache.maven.model.DependencyManagement; +import org.apache.maven.model.Exclusion; import org.apache.maven.model.InputLocation; import org.apache.maven.model.InputSource; import org.apache.maven.model.Model; @@ -63,17 +74,6 @@ import org.apache.maven.model.validation.ModelValidator; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; - import static org.apache.maven.model.building.Result.error; import static org.apache.maven.model.building.Result.newResult; @@ -1223,7 +1223,40 @@ public class DefaultModelBuilder importMgmt = new DependencyManagement(); } - putCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.IMPORT, importMgmt ); + // [MNG-5600] Dependency management import should support exclusions. + if ( !dependency.getExclusions().isEmpty() ) + { + for ( final Exclusion exclusion : dependency.getExclusions() ) + { + if ( exclusion.getGroupId() != null && exclusion.getArtifactId() != null ) + { + for ( final Iterator<Dependency> dependencies = importMgmt.getDependencies().iterator(); + dependencies.hasNext(); ) + { + final Dependency candidate = dependencies.next(); + + if ( ( exclusion.getGroupId().equals( "*" ) + || exclusion.getGroupId().equals( candidate.getGroupId() ) ) + && ( exclusion.getArtifactId().equals( "*" ) + || exclusion.getArtifactId().equals( candidate.getArtifactId() ) ) ) + { + // Dependency excluded from import. + dependencies.remove(); + } + } + } + } + + for ( final Dependency includedDependency : importMgmt.getDependencies() ) + { + includedDependency.getExclusions().addAll( dependency.getExclusions() ); + } + } + else + { + // Only dependency managements without exclusion processing applied can be cached. + putCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.IMPORT, importMgmt ); + } } if ( importMgmts == null )