[MNG-5988] Dependency mediation should prioritize transitive dependencies based on scope.
- Dominant language
- Java
- Stars
- 5.3k
- Forks
- 3.1k
- Avg merge
- 20h 42m
- Merged PRs (30d)
- 297
Description
**[Jostein Gogstad](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=jgogstad)** opened **[MNG-5988](https://issues.apache.org/jira/browse/MNG-5988?redirect=false)** and commented
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.
```xml
4.0.0
com.example
bugreport
jar
1.0.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-web
1.3.2.RELEASE
org.apache.camel
camel-test-spring
2.16.2
test
```
Now look for `spring-beans` or `spring-context` in the following dependency graphs:
```xml
[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
```
```xml
[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
```
---
**Affects:** 3.2.3
**Attachments:**
- [Collected.svg](https://issues.apache.org/jira/secure/attachment/12815724/Collected.svg) (_6.65 kB_)
- [MNG-5988.zip](https://issues.apache.org/jira/secure/attachment/12815711/MNG-5988.zip) (_3.38 kB_)
- [PRE.svg](https://issues.apache.org/jira/secure/attachment/12814785/PRE.svg) (_183.01 kB_)
- [Resolved.svg](https://issues.apache.org/jira/secure/attachment/12815725/Resolved.svg) (_5.85 kB_)
**Issue Links:**
- [MNG-6056](https://issues.apache.org/jira/browse/MNG-6056) Implement Feature Toggle Module to handle Feature Toggles
(_**"is blocked by"**_)
- [MNG-7852](https://issues.apache.org/jira/browse/MNG-7852) Use all the versions for dependency resolution rather than "nearest first" or "declared first"
- [MNG-6058](https://issues.apache.org/jira/browse/MNG-6058) Test dependencies should override application dependencies only during testing
(_**"is superceded by"**_)
**Remote Links:**
- [GitHub Pull Request #442
](https://github.com/apache/maven-dependency-plugin/pull/442)
4 votes, 12 watchers
Contributor guide
Assessment
This issue has not been assessed yet.