maven icon indicating copy to clipboard operation
maven copied to clipboard

[MNG-5600] Dependency management import should support exclusions.

Open ChristianSchulte opened this issue 7 years ago • 4 comments

ChristianSchulte avatar Dec 31 '17 06:12 ChristianSchulte

@ChristianSchulte - Any update on when this can/will be merged?? I'm unfamiliar with the maven contribution process

RayzorFlash avatar Jul 19 '18 17:07 RayzorFlash

@olamy @rfscholte - Could we get this patch being merged? If any help is needed don't hesitate to ping me.

Here is @ChristianSchulte's updated patch without conflict:

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 f981944f940fcbc912959752d3cff4bc1586519f..2a65bbe9ac14a01dac0c49d900c3fbeef052f6a3 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
@@ -27,6 +27,7 @@
 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;
@@ -1316,7 +1317,40 @@ private void importDependencyManagement( Model model, ModelBuildingRequest reque
                     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 )

alex1989hu avatar Oct 13 '19 09:10 alex1989hu

@alex1989hu please provide another pr

olamy avatar Oct 13 '19 10:10 olamy