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?
In Gradle dependencies are libraries required to build your code. Each of these libraries may have their own dependencies, adding transitive dependencies to your project. This structure is called the Gradle dependency tree, with its own rules on dependency conflict resolution and more.
At runtime, Gradle will locate the declared dependencies if needed for operating a specific task. The dependencies might need to be downloaded from a remote repository, retrieved from a local directory or requires another project to be built in a multi-project setting. This process is called dependency resolution.
It means that dependency graph contains multiple dependencies with the same group and module but different versions for e.g. org.
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" }
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With