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 ) ) ) ); + + } } } }