38

I have a Gradle project with many dependencies, one of which is resolved as follows:

gradle dependencyInsight --configuration compile --dependency javax.activation

:dependencyInsight
javax.activation:activation:1.1 (conflict resolution)
+--- com.sun.mail:mailapi:1.4.4
|    \--- compile
\--- com.sun.mail:smtp:1.4.4
     \--- compile

javax.activation:activation:1.0.2 -> 1.1
\--- compile

Version 1.1 must be a transitive dependency because I explicitly specified 1.0.2. How can I find out where this specific transitive dependency comes from?

Giovanni Botta
  • 9,626
  • 5
  • 51
  • 94

1 Answers1

30

Answering this question is the whole point of the dependencyInsight task. javax.activation:activation:1.1 is pulled in by com.sun.mail:mailapi:1.4.4 and com.sun.mail:smtp:1.4.4.

If your own code also depends on javax.activation, you can force your version with compile("javax.activation:activation:1.0.2") { force = true }. If not, you can force a version with configurations.all { resolutionStrategy.force "javax.activation:activation:1.0.2" }.

Peter Niederwieser
  • 121,412
  • 21
  • 324
  • 259
  • Yep, I didn't realize it. Is there a way to show all the resolved conflicts in one shot? – Giovanni Botta Jan 23 '14 at 19:45
  • 4
    You can do `configurations.all { resulutionStrategy.failOnVersionConflict() }`, in which case Gradle will force you to resolve all version conflicts explicitly in the build script. – Peter Niederwieser Jan 23 '14 at 19:48
  • You get some information with `gradle dependencies`. If you need more, you can use `gradle dependencyInsight` (for a particular dependency). – Peter Niederwieser Jan 23 '14 at 23:12
  • 2
    +1. Full examples here: https://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/ – Vaiden Sep 07 '19 at 09:44