Re: Transitive dependency question

2017-06-02 Thread Stephen Connolly
I think that is a bug that is in scope for 3.5.1 or 3.6.0

On 31 May 2017 at 22:30, Laird Nelson  wrote:

> (I've been working with Maven since at least 2004 and I think I *still*
> don't
> get transitive dependencies.)
>
> I have a pom.xml file of type pom that has some compile-scoped dependencies
> in it.  (P1 -> A(compile), B(compile))
>
> I have another project that depends on this pom in provided scope (I'm just
> playing around for now).  The intention is that I will "get" all the
> transitive compile-scoped dependencies of the pom artifact I'm depending
> on, but in provided scope.  (P2 -> P1(provided); result is effectively: P2
> -> P1(provided) -> A(provided), B(provided))
>
> If that's all I have, then indeed, that's the result I observe: when I run
> the maven-dependency-plugin's dependency-tree goal, I see these transitive
> dependencies and they are all marked as being in provided scope, not
> compile.  I see, in other words, the tree representation of P2 ->
> P1(provided) -> A(provided), B(provided).  So far so good.
>
> Now I pull in another (jar) dependency in runtime scope.  It has some
> transitive dependencies in compile scope.  Fine.  They don't include any of
> the dependencies mentioned in my second paragraph. (P2 -> (P1(provided) ->
> A(provided),B(provided)), (P3(runtime) -> C(compile),D(compile)))  Note
> that this pseudo-language is what I *expect* to see.
>
> When I run dependency:tree on this hairy mess, it does *not* show the
> representation of my pseudo-language above.  Instead, it shows the
> transitive dependencies from my third paragraph as direct "children" of the
> pom-type artifact I'm pulling in in provided scope (P1), but they all have
> a scope of runtime.  So, for just this part of the tree: P2 -> P1(provided)
> -> A(runtime(!)), B(runtime(!))
>
> What the…?  In other words, somebody in the tree is "promoting" my A and B
> dependencies to runtime scope.  But I can't tell from the tree output who
> it is, because A and B (that are now apparently runtime-scoped
> dependencies) are still showing as children of my pom artifact (P1,
> mentioned in my second paragraph).
>
> Is this all according to plan?  I'm using version 3.0.0 of the
> maven-dependency-plugin and version 3.5.0 of Maven itself.
>
> Best,
> Laird
>


Re: Transitive Dependency Question

2013-06-04 Thread Jörg Schaible
Hi Jamal,

Jamal B wrote:

> 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?

You can control this with a dependencyManagement section of a shared parent. 
Just define there junit:junit: and the scope.

The annoying part is nevertheless that the situation is no longer obvious in 
M3. Try this in M2 and you'll see that the dependency makes much more sense. 
Since the same plugin produces different output, I blame the new Aether 
backend here which favors now the "nearest" occurrence without taking the 
inherited scope into account. While this behavior has no impact on the 
resulting class path, it hides dependency problems like the one, you have 
encountered here.

- Jörg


-
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org



Re: Transitive Dependency Question

2013-06-03 Thread Jamal B
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  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:
> >
> > 
> > junit
> > junit
> > 
> >
> > Project application defines a dependency on test-utils with a scope of
> > test like such
> > 
> > ${project.groupId}
> > test-utils
> > ${project.version}
> > test
> > 
> >
> > 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-unsubscr...@maven.apache.org
> For additional commands, e-mail: users-h...@maven.apache.org
>
>


Re: Transitive Dependency Question

2013-06-03 Thread Jörg Schaible
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:
> 
> 
> junit
> junit
> 
> 
> Project application defines a dependency on test-utils with a scope of
> test like such
> 
> ${project.groupId}
> test-utils
> ${project.version}
> test
> 
> 
> 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-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org



Re: Transitive Dependency Question

2013-06-03 Thread Jamal B
Hi, thanks for your response.

Running dependency:list shows also shows that junit is at compile scope
which I expected to be at test scope.

[INFO] --- maven-dependency-plugin:2.7:list (default-cli) @ application ---
[INFO]
[INFO] The following files have been resolved:

[INFO]junit:junit:jar:4.8.2:compile

So is it a correct statement that the base scope of a dependency is fixed
regardless of the declared scope of the outer dependency?  This appears to
be the behavior, but I am not sure that this is correct.


On Mon, Jun 3, 2013 at 1:53 PM, Baptiste MATHUS  wrote:

> Hi,
> Tree is showing the tree. So it seems correct at first sight. Its showing
> you the dependency beetween your test-utils of the project and junit which
> is in fact scope compile.
>
> What you seem to actually want to have is the resolved list of dependencies
> for your application project.
> That goal is called dependency:list.
>
> Hope this helps.
>
> Cheers
>
> -- Baptiste
> Le 3 juin 2013 19:21, "Jamal B"  a écrit :
>
> > 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:
> >
> > 
> > junit
> > junit
> > 
> >
> > Project application defines a dependency on test-utils with a scope of
> test
> > like such
> > 
> > ${project.groupId}
> > test-utils
> > ${project.version}
> > test
> > 
> >
> > 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.
> >
>


Re: Transitive Dependency Question

2013-06-03 Thread Baptiste MATHUS
Hi,
Tree is showing the tree. So it seems correct at first sight. Its showing
you the dependency beetween your test-utils of the project and junit which
is in fact scope compile.

What you seem to actually want to have is the resolved list of dependencies
for your application project.
That goal is called dependency:list.

Hope this helps.

Cheers

-- Baptiste
Le 3 juin 2013 19:21, "Jamal B"  a écrit :

> 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:
>
> 
> junit
> junit
> 
>
> Project application defines a dependency on test-utils with a scope of test
> like such
> 
> ${project.groupId}
> test-utils
> ${project.version}
> test
> 
>
> 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.
>