Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Won't Fix
-
Affects Version/s: 2.0.5
-
Fix Version/s: 2.0.5
-
Component/s: Dependencies
-
Labels:None
-
Complexity:Intermediate
-
Number of attachments :
Description
Say you have a project that has 3 dependecies A, B and C, amongst which 2 of them have a dependency D but with a different version:
A -> D v2.1
B -> D v3
C (has no transitive dependency to D)
In the project, you call a class that exists in D v3 but not in D v2.1.
-> If you launch "mvn clean compile" with M2.0.4, the build is successful, but not with M2.0.5.
And the most surprising: if you remove dependency C, then both builds break...
I attached a test project that reproduces the bug.
Issue Links
- relates to
-
MNGSITE-22
update dependency mediation information for Maven 2.0.5
-
Activity
Fabrice Bellingard
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Summary | Transitive dependency resolution differs between 2.0.4 and 2.0.5 | Transitive dependency resolution differs between 2.0.4 and (future) 2.0.5 |
Fabrice Bellingard
made changes -
| Affects Version/s | 2.0.4 [ 12527 ] | |
| Affects Version/s | 2.0.5 [ 12294 ] |
Emmanuel Venisse
made changes -
| Fix Version/s | 2.0.5 [ 12294 ] |
Jason van Zyl
made changes -
| Status | Open [ 1 ] | Closed [ 6 ] |
| Resolution | Won't Fix [ 2 ] |
Herve Boutemy
made changes -
| Link | This issue relates to MNG-2832 [ MNG-2832 ] |
Maven 2.0.4 uses the "nearest" strategy to solve dependency conflicts, so the issue
"
project depends on A -> D-v2
project depends on B -> D-v3
"
has no determinist solution about what version of D will be transitively used. Having this work in maven 2.0.4 in some circonstances is only beeing lucky. If your project depends on classes from D v3, you should declare it as a dependency to solve the conflict.
there is some plan to enhance the resolution strategy with (http://docs.codehaus.org/display/MAVENUSER/Improving+Maven2+Dependency+Resolution)
but AFAIK the target is maven 2.1.