[ 
https://issues.apache.org/jira/browse/MNG-5980?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16998120#comment-16998120
 ] 

elharo commented on MNG-5980:
-----------------------------

If we don't guarantee an order for transitives, then dependency mediation is 
toast. On 
[https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html]
 we say

_Dependency mediation_ - this determines what version of an artifact will be 
chosen when multiple versions are encountered as dependencies. Maven picks the 
"nearest definition". That is, it uses the version of the closest dependency to 
your project in the tree of dependencies. You can always guarantee a version by 
declaring it explicitly in your project's POM. Note that if two dependency 
versions are at the same depth in the dependency tree, the first declaration 
wins.

I've been meaning to expand on this, but in other docs I've written that this 
means Maven does a breadth first search of the tree. This seems to match actual 
behavior, and works pretty well in practice.

 

 

> DependencyGraphBuilder gives different results depending on the order of 
> dependencies in the pom
> ------------------------------------------------------------------------------------------------
>
>                 Key: MNG-5980
>                 URL: https://issues.apache.org/jira/browse/MNG-5980
>             Project: Maven
>          Issue Type: Bug
>          Components: Dependencies, Plugin API
>         Environment: Kubuntu 14.10
> Java 8
> Maven 3.0.5/3.3.9
> maven-dependency-tree 2.1/3.0
>            Reporter: Gerrit Daniels
>            Priority: Major
>         Attachments: dependency-graph-builder-bug.zip
>
>
> I'm getting different results when using DependencyGraphBuilder in a plugin 
> depending on the order in which the dependencies are defined in the pom of 
> the project the plugin is running on. I have created some test projects to 
> reproduce the bug.
> - actual-dependency: This is the dependency that moves when changing the 
> order in the pom.
> - test-dependency: Depends on the actual-dependency with compile scope.
> - compile-dependency: Also depends on the actual-dependency with compile 
> scope.
> - main-project: Depends on the test-dependency with test scope and on the 
> compile-dependency with compile scope. Has the plugin configured.
> - plugin: Builds the dependency graph.
> When running maven with the -X switch on the main project with the 
> test-dependency declared first in the pom I get the following dependency 
> graph:
> {code}
> [DEBUG] com.qmino:main-project:jar:1.0-SNAPSHOT
> [DEBUG]    com.qmino:test-dependency:jar:1.0-SNAPSHOT:test
> [DEBUG]       com.qmino:actual-dependency:jar:1.0-SNAPSHOT:compile
> [DEBUG]    com.qmino:compile-dependency:jar:1.0-SNAPSHOT:compile
> {code}
> When I change the order of the dependencies I get:
> {code}
> [DEBUG] com.qmino:main-project:jar:1.0-SNAPSHOT
> [DEBUG]    com.qmino:compile-dependency:jar:1.0-SNAPSHOT:compile
> [DEBUG]       com.qmino:actual-dependency:jar:1.0-SNAPSHOT:compile
> [DEBUG]    com.qmino:test-dependency:jar:1.0-SNAPSHOT:test
> {code}
> It seems to me that the order of the dependencies shouldn't change the 
> results. In both cases I would expect the second output, since the compile 
> scope should overrule the test scope.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to