Search code examples
eclipsespringmavenspring-mvclog4j

How to find the parent of a Maven transitive dependency


I am building a Java (web) application with Maven and Eclipse.

When I look inside my .war file I can see the following logging libraries there:

log4j-1.2.14.jar
log4j-1.2.17.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar

I did not declared these libraries in my pom.xml, so they probably are transitive dependencies (i.e. dependencies of my dependencies).

How can I find out which of my dependencies depend on these libraries?

I tried to use the mvn dependency:tree plugin, but it does not show any of these .jars.

In Eclipse, the Java Resources > Libraries > Maven Dependencies node does not show them either. Though, curiously, it shows other transitive dependencies of my project.


Solution

  • If you want to rely on maven only you may want to take a closer look on the dependency plugin, here are two examples:

    mvn dependency:tree -Dverbose will display more detailed information - especially for example if a artifact will be omitted for conflicting with another artifacts version (e.g. convergence issue). It will also display you the hirachy with all the transitive dependencies.

    To have a specific artefact analyzed (to for example find who delivers a specific transitive dependency) you can specify like so:

    mvn dependency:tree -Dincludes=com.my.group.id:my-artefact-id:jar:1.0.1 -Dverbose

    (Where you obviously need to adjust the artefact, packaging type and version according to your needs)