Repository: maven
Updated Branches:
  refs/heads/master 508e16e23 -> d8b66aebf


[MNG-5971] Imported dependencies should be available to inheritance processing

o Updated to provide more descriptive model problems for when a conflicting
  dependency gets imported into the same model.


Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/d8b66aeb
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/d8b66aeb
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/d8b66aeb

Branch: refs/heads/master
Commit: d8b66aebfb9166b2b20f93f3078460b0a3913439
Parents: 508e16e
Author: Christian Schulte <schu...@apache.org>
Authored: Mon Feb 22 23:58:41 2016 +0100
Committer: Christian Schulte <schu...@apache.org>
Committed: Mon Feb 22 23:58:41 2016 +0100

----------------------------------------------------------------------
 .../DefaultDependencyManagementImporter.java    | 42 ++++++++++++++++----
 1 file changed, 34 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/d8b66aeb/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
index a5a05e8..0854477 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
@@ -30,7 +30,9 @@ import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.Exclusion;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblem;
 import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
 import org.codehaus.plexus.component.annotations.Component;
 
 /**
@@ -72,25 +74,49 @@ public class DefaultDependencyManagementImporter
                 {
                     if ( !targetDependencies.containsKey( 
sourceDependency.getManagementKey() ) )
                     {
-                        List<Dependency> conflictingDependencies =
+                        List<Dependency> conflictCanditates =
                             sourceDependencies.get( 
sourceDependency.getManagementKey() );
 
-                        if ( conflictingDependencies == null )
+                        if ( conflictCanditates == null )
                         {
-                            conflictingDependencies = new ArrayList<>();
-                            sourceDependencies.put( 
sourceDependency.getManagementKey(), conflictingDependencies );
+                            conflictCanditates = new ArrayList<>();
+                            sourceDependencies.put( 
sourceDependency.getManagementKey(), conflictCanditates );
                         }
 
-                        conflictingDependencies.add( sourceDependency );
+                        conflictCanditates.add( sourceDependency );
                     }
                 }
             }
 
-            for ( final List<Dependency> conflictingDependencies : 
sourceDependencies.values() )
+            for ( final List<Dependency> conflictCanditates : 
sourceDependencies.values() )
             {
-                targetDependencyManagement.getDependencies().
-                    addAll( this.removeRedundantDependencies( 
conflictingDependencies ) );
+                final List<Dependency> conflictingDependencies =
+                    this.removeRedundantDependencies( conflictCanditates );
 
+                targetDependencyManagement.getDependencies().addAll( 
conflictingDependencies );
+
+                if ( conflictingDependencies.size() > 1 )
+                {
+                    final StringBuilder conflictsBuilder = new StringBuilder( 
conflictingDependencies.size() * 128 );
+
+                    for ( final Dependency dependency : 
conflictingDependencies )
+                    {
+                        conflictsBuilder.append( ", '" ).append( 
dependency.getLocation( "" ) ).append( '\'' );
+                    }
+
+                    problems.add( new ModelProblemCollectorRequest( 
ModelProblem.Severity.WARNING,
+                                                                    
ModelProblem.Version.BASE ).
+                        setMessage( String.format(
+                                "Multiple conflicting imports of dependency 
'%1$s' into model '%2$s' @ '%3$s' (%4$s). "
+                                    + "To resolve this conflict, either 
declare the dependency directly "
+                                    + "in model '%2$s' to override what gets 
imported or rearrange the causing "
+                                    + "imports in the inheritance hierarchy to 
apply standard override logic. "
+                                    + "Without resolving this conflict, your 
build relies on indeterministic "
+                                    + "behaviour.",
+                                conflictingDependencies.get( 0 
).getManagementKey(), target.getId(),
+                                target.getPomFile().getAbsolutePath(), 
conflictsBuilder.substring( 2 ) ) ) );
+
+                }
             }
         }
     }

Reply via email to