Repository: maven Updated Branches: refs/heads/master bbffde98f -> 06580630a
[MNG-6135] Maven plugins and core extensions are not dependencies, they should be resolved the same way as projects. [MNG-5761] Dependency management is not transitive. o Updated to make any dependencies added to a plugin in a consuming POM using the 'plugin/dependencies/dependency' element override not only the dependencies resolved for the plugin but also any dependency management applied. Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/06580630 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/06580630 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/06580630 Branch: refs/heads/master Commit: 06580630a3b09143770fd8eeda6c86f70a016f4d Parents: bbffde9 Author: Christian Schulte <schu...@apache.org> Authored: Sun Dec 18 06:12:57 2016 +0100 Committer: Christian Schulte <schu...@apache.org> Committed: Sun Dec 18 06:18:33 2016 +0100 ---------------------------------------------------------------------- .../DefaultPluginDependenciesResolver.java | 34 +++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/06580630/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java index 25d582d..b46c35d 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java @@ -61,6 +61,7 @@ import org.eclipse.aether.util.graph.manager.DependencyManagerUtils; import org.eclipse.aether.util.graph.selector.AndDependencySelector; import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector; import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer; +import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator; import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy; /** @@ -307,7 +308,15 @@ public class DefaultPluginDependenciesResolver pluginDep = pluginDep.setScope( JavaScopes.RUNTIME ); } request.addDependency( pluginDep ); - pluginDependencyManager.getExclusions().add( pluginDep.getArtifact() ); + + if ( logger.isDebugEnabled() ) + { + logger.debug( String.format( "Collecting plugin dependency %s from project.", pluginDep ) ); + } + + pluginDependencyManager.getExclusions(). + addAll( this.collectPluginDependencyArtifacts( session, repositories, pluginDep ) ); + } // [MNG-6135] Maven plugins and core extensions are not dependencies, they should be resolved the same way @@ -343,6 +352,29 @@ public class DefaultPluginDependenciesResolver } } + private List<org.eclipse.aether.artifact.Artifact> collectPluginDependencyArtifacts( + final RepositorySystemSession session, final List<RemoteRepository> repositories, + final org.eclipse.aether.graph.Dependency pluginDependency ) + throws DependencyCollectionException + { + final CollectRequest request = new CollectRequest(); + request.setRequestContext( REPOSITORY_CONTEXT ); + request.setRepositories( repositories ); + request.setRoot( pluginDependency ); + request.setTrace( RequestTrace.newChild( null, pluginDependency ) ); + + final DependencyNode node = repoSystem.collectDependencies( session, request ).getRoot(); + + if ( logger.isDebugEnabled() ) + { + node.accept( new GraphLogger() ); + } + + final PreorderNodeListGenerator nlg = new PreorderNodeListGenerator(); + node.accept( nlg ); + return nlg.getArtifacts( true ); + } + // Keep this class in sync with org.apache.maven.project.DefaultProjectDependenciesResolver.GraphLogger class GraphLogger implements DependencyVisitor