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

Elliotte Rusty Harold commented on MNG-5988:
--------------------------------------------

I think what we need here is a merging of the test scoped and the compile 
scoped dependency. Assuming the test scoped dependency is nearer in the tree, 
then that is absolutely the version we should choose. However, we should be 
able to upgrade the scope of that dependency to compile while retaining the 
version.

> Dependency mediation should prioritize transitive dependencies based on scope.
> ------------------------------------------------------------------------------
>
>                 Key: MNG-5988
>                 URL: https://issues.apache.org/jira/browse/MNG-5988
>             Project: Maven
>          Issue Type: Bug
>          Components: Dependencies
>    Affects Versions: 3.2.3
>            Reporter: Jostein Gogstad
>            Priority: Critical
>             Fix For: 4.0.0
>
>         Attachments: Collected.svg, MNG-5988.zip, PRE.svg, Resolved.svg
>
>
> The 
> [documentation|https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html]
>  states that dependency mediation only supports "nearest definition", 
> regardless of the scope of the parent dependency.
> If both compile- and test scoped dependencies shares the same transitive 
> dependency, the test-scoped one will win if it has shallower depth. That in 
> turn will lead to runtime exceptions since the transitive dependency is no 
> longer on the classpath.
> Take the following pom from a typical [Spring 
> Boot|http://projects.spring.io/spring-boot/] application. Since the 
> {{camel-test-spring}} dependency also depends on spring, it wins and Spring 
> is no longer available to the application at runtime.
> {code:xml}
> <project xmlns="http://maven.apache.org/POM/4.0.0"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
> http://maven.apache.org/maven-v4_0_0.xsd";>
>     <modelVersion>4.0.0</modelVersion>
>     <groupId>com.example</groupId>
>     <artifactId>bugreport</artifactId>
>     <packaging>jar</packaging>
>     <version>1.0.0-SNAPSHOT</version>
>     <dependencies>
>         <dependency>
>             <groupId>org.springframework.boot</groupId>
>             <artifactId>spring-boot-starter-web</artifactId>
>             <version>1.3.2.RELEASE</version>
>         </dependency>
>         <dependency>
>             <groupId>org.apache.camel</groupId>
>             <artifactId>camel-test-spring</artifactId>
>             <version>2.16.2</version>
>             <scope>test</scope>
>         </dependency>
>     </dependencies>
> </project>
> {code}
> Now look for {{spring-beans}} or {{spring-context}} in the following 
> dependency graphs:
> {code:xml|title=mvn dependency:tree (with camel-test-spring)}
> [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ bugreport ---
> [INFO] com.example:bugreport:jar:1.0.0-SNAPSHOT
> [INFO] +- 
> org.springframework.boot:spring-boot-starter-web:jar:1.3.2.RELEASE:compile
> [INFO] |  +- 
> org.springframework.boot:spring-boot-starter:jar:1.3.2.RELEASE:compile
> [INFO] |  |  +- org.springframework.boot:spring-boot:jar:1.3.2.RELEASE:compile
> [INFO] |  |  +- 
> org.springframework.boot:spring-boot-autoconfigure:jar:1.3.2.RELEASE:compile
> [INFO] |  |  +- 
> org.springframework.boot:spring-boot-starter-logging:jar:1.3.2.RELEASE:compile
> [INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.1.3:compile
> [INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.1.3:compile
> [INFO] |  |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.13:compile
> [INFO] |  |  |  +- org.slf4j:jul-to-slf4j:jar:1.7.13:compile
> [INFO] |  |  |  \- org.slf4j:log4j-over-slf4j:jar:1.7.13:compile
> [INFO] |  |  \- org.yaml:snakeyaml:jar:1.16:runtime
> [INFO] |  +- 
> org.springframework.boot:spring-boot-starter-tomcat:jar:1.3.2.RELEASE:compile
> [INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.0.30:compile
> [INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.0.30:compile
> [INFO] |  |  +- 
> org.apache.tomcat.embed:tomcat-embed-logging-juli:jar:8.0.30:compile
> [INFO] |  |  \- 
> org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.0.30:compile
> [INFO] |  +- 
> org.springframework.boot:spring-boot-starter-validation:jar:1.3.2.RELEASE:compile
> [INFO] |  |  \- org.hibernate:hibernate-validator:jar:5.2.2.Final:compile
> [INFO] |  |     +- javax.validation:validation-api:jar:1.1.0.Final:compile
> [INFO] |  |     +- org.jboss.logging:jboss-logging:jar:3.2.1.Final:compile
> [INFO] |  |     \- com.fasterxml:classmate:jar:1.1.0:compile
> [INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.5:compile
> [INFO] |  |  +- 
> com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile
> [INFO] |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.6.5:compile
> [INFO] |  +- org.springframework:spring-web:jar:4.2.4.RELEASE:compile
> [INFO] |  \- org.springframework:spring-webmvc:jar:4.2.4.RELEASE:compile
> [INFO] \- org.apache.camel:camel-test-spring:jar:2.16.2:test
> [INFO]    +- org.apache.camel:camel-test:jar:2.16.2:test
> [INFO]    |  +- org.apache.camel:camel-core:jar:2.16.2:test
> [INFO]    |  |  \- org.slf4j:slf4j-api:jar:1.6.6:compile
> [INFO]    |  \- junit:junit:jar:4.11:test
> [INFO]    |     \- org.hamcrest:hamcrest-core:jar:1.3:test
> [INFO]    +- org.apache.camel:camel-spring:jar:2.16.2:test
> [INFO]    +- org.springframework:spring-test:jar:4.1.9.RELEASE:test
> [INFO]    +- org.springframework:spring-context:jar:4.1.9.RELEASE:compile
> [INFO]    +- org.springframework:spring-beans:jar:4.1.9.RELEASE:compile
> [INFO]    +- org.springframework:spring-expression:jar:4.1.9.RELEASE:compile
> [INFO]    +- org.springframework:spring-aop:jar:4.1.9.RELEASE:compile
> [INFO]    |  \- aopalliance:aopalliance:jar:1.0:compile
> [INFO]    +- org.springframework:spring-tx:jar:4.1.9.RELEASE:test
> [INFO]    +- org.springframework:spring-core:jar:4.1.9.RELEASE:compile
> [INFO]    |  \- commons-logging:commons-logging:jar:1.2:compile
> [INFO]    +- com.sun.xml.bind:jaxb-core:jar:2.2.11:test
> [INFO]    \- com.sun.xml.bind:jaxb-impl:jar:2.2.11:test
> {code}
> {code:xml|title=mvn dependency:tree (without camel-test-spring)}
> [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ bugreport ---
> [INFO] com.example:bugreport:jar:1.0.0-SNAPSHOT
> [INFO] \- 
> org.springframework.boot:spring-boot-starter-web:jar:1.3.2.RELEASE:compile
> [INFO]    +- 
> org.springframework.boot:spring-boot-starter:jar:1.3.2.RELEASE:compile
> [INFO]    |  +- org.springframework.boot:spring-boot:jar:1.3.2.RELEASE:compile
> [INFO]    |  +- 
> org.springframework.boot:spring-boot-autoconfigure:jar:1.3.2.RELEASE:compile
> [INFO]    |  +- 
> org.springframework.boot:spring-boot-starter-logging:jar:1.3.2.RELEASE:compile
> [INFO]    |  |  +- ch.qos.logback:logback-classic:jar:1.1.3:compile
> [INFO]    |  |  |  +- ch.qos.logback:logback-core:jar:1.1.3:compile
> [INFO]    |  |  |  \- org.slf4j:slf4j-api:jar:1.7.7:compile
> [INFO]    |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.13:compile
> [INFO]    |  |  +- org.slf4j:jul-to-slf4j:jar:1.7.13:compile
> [INFO]    |  |  \- org.slf4j:log4j-over-slf4j:jar:1.7.13:compile
> [INFO]    |  +- org.springframework:spring-core:jar:4.2.4.RELEASE:compile
> [INFO]    |  \- org.yaml:snakeyaml:jar:1.16:runtime
> [INFO]    +- 
> org.springframework.boot:spring-boot-starter-tomcat:jar:1.3.2.RELEASE:compile
> [INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.0.30:compile
> [INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.0.30:compile
> [INFO]    |  +- 
> org.apache.tomcat.embed:tomcat-embed-logging-juli:jar:8.0.30:compile
> [INFO]    |  \- 
> org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.0.30:compile
> [INFO]    +- 
> org.springframework.boot:spring-boot-starter-validation:jar:1.3.2.RELEASE:compile
> [INFO]    |  \- org.hibernate:hibernate-validator:jar:5.2.2.Final:compile
> [INFO]    |     +- javax.validation:validation-api:jar:1.1.0.Final:compile
> [INFO]    |     +- org.jboss.logging:jboss-logging:jar:3.2.1.Final:compile
> [INFO]    |     \- com.fasterxml:classmate:jar:1.1.0:compile
> [INFO]    +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.5:compile
> [INFO]    |  +- 
> com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile
> [INFO]    |  \- com.fasterxml.jackson.core:jackson-core:jar:2.6.5:compile
> [INFO]    +- org.springframework:spring-web:jar:4.2.4.RELEASE:compile
> [INFO]    |  +- org.springframework:spring-aop:jar:4.2.4.RELEASE:compile
> [INFO]    |  |  \- aopalliance:aopalliance:jar:1.0:compile
> [INFO]    |  +- org.springframework:spring-beans:jar:4.2.4.RELEASE:compile
> [INFO]    |  \- org.springframework:spring-context:jar:4.2.4.RELEASE:compile
> [INFO]    \- org.springframework:spring-webmvc:jar:4.2.4.RELEASE:compile
> [INFO]       \- 
> org.springframework:spring-expression:jar:4.2.4.RELEASE:compile
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to