maven-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jörg Schaible <>
Subject Re: Transitive Dependency Question
Date Mon, 03 Jun 2013 23:56:01 GMT
Hi Jamal,

Jamal B wrote:

> Hello, I have a question about transitive dependencies.  According to the
> pom documentation here:
> project dependencies marked with test scope are not transitive.  I assumed
> that this also applied to it's dependencies, so my question is if I
> declare a dependency on a project at test scope, that project's
> dependencies should
> all be included at test scope.  For example, given the following
> project(s)
> Project test-utils defines a junit dependency like such:
> <dependency>
> <groupId>junit</groupId>
> <artifactId>junit</artifactId>
> </dependency>
> Project application defines a dependency on test-utils with a scope of
> test like such
> <dependency>
> <groupId>${project.groupId}</groupId>
> <artifactId>test-utils</artifactId>
> <version>${project.version}</version>
> <scope>test</scope>
> </dependency>
> Now running mvn clean dependency:tree shows that the junit dependency is
> being passed to the application project at compile scope which is not
> expected.
> [INFO] --- maven-dependency-plugin:2.7:tree (default-cli) @ application
> [--- INFO] org.sandbox:application:war:1.0.0-SNAPSHOT
> ....
> [INFO] \- org.sandbox:test-utils:jar:1.0.0-SNAPSHOT:test
> [INFO]    +- junit:junit:jar:4.8.2:compile
> [INFO]    +- org.mockito:mockito-all:jar:1.8.5:test
> [INFO]    +- com.h2database:h2:jar:1.3.165:test
> [INFO]    \- log4j:log4j:jar:1.2.16:test
> Is this a bug or was my interpretation of the transitive dependency logic
> incorrect?
> Thank you for your time.

Actually I was fooled by such an output with M3 in one of my projects at 
first sight also.

So, please make a test: Comment out the org.sandbox:test-utils in your POM 
and print the tree again. I am quite sure that you will see that junit:junit 
is now introduced by a different dependency that is not of test scope. What 
you see above is only the result of the dependency resolver. It detected 
that it already has a junit:junit in its transitive deps in compile scope 
(maybe even in a different version), but the "nearest" path to junit was as 
direct child of org.sandbox:test-utils. Therefor it was "promoted" to 
compile scope in this place, but the overall result of the compilation 
classpath is still OK, it is only the displayed tree that is somewhat 
inconsistent (compared to M2).

- Jörg

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message