maven-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jamal B <jm151...@gmail.com>
Subject Re: Transitive Dependency Question
Date Tue, 04 Jun 2013 02:54:11 GMT
Interesting....

Taking your suggestion, it looks like it is coming in from another compile
dependency, and was "promoted" to compile.

[INFO] +- org.apache.maven.shared:maven-shared-jar:jar:1.1:compile
[INFO] |  +- org.codehaus.plexus:plexus-digest:jar:1.0:compile
[INFO] |  |  \-
org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-8:compile
[INFO] |  |     +- junit:junit:jar:3.8.1:compile

Is there a way to prevent this from happening without having to add exclude
stanzas across projects where this is happening?



On Mon, Jun 3, 2013 at 7:56 PM, Jörg Schaible <joerg.schaible@gmx.de> wrote:

> Hi Jamal,
>
> Jamal B wrote:
>
> > Hello, I have a question about transitive dependencies.  According to the
> > pom documentation here: http://maven.apache.org/pom.html#Dependencies
> >
> > 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: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message