Gradle – Display project dependency

gradle-project-dependencies

In this tutorial, we will show you how to display project dependencies with the Gradle build tool. Review a simple Spring MVC project dependencies.

build.gradle

dependencies { 
 	compile 'org.slf4j:jcl-over-slf4j:1.7.12'
	compile 'ch.qos.logback:logback-classic:1.1.3'
        compile('org.springframework:spring-webmvc:4.1.6.RELEASE'){
		exclude group: 'commons-logging', module: 'commons-logging'
	}
	compile 'org.hsqldb:hsqldb:2.3.2'
	providedCompile 'javax.servlet:servlet-api:2.5'
}

P.S Tested with Gradle 2.4

1. gradle dependencies

Display project dependencies (direct and transitive for all configurations) in a tree format. This dependency report is very large, not much value to see this.

Terminal

$ gradle dependencies

archives - Configuration for archive artifacts.
No dependencies

compile - Compile classpath for source set 'main'.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
+--- org.springframework:spring-webmvc:4.1.6.RELEASE
|    +--- org.springframework:spring-beans:4.1.6.RELEASE
|    |    \--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-context:4.1.6.RELEASE
|    |    +--- org.springframework:spring-aop:4.1.6.RELEASE
|    |    |    +--- aopalliance:aopalliance:1.0
|    |    |    +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|    |    |    \--- org.springframework:spring-core:4.1.6.RELEASE
|    |    +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|    |    +--- org.springframework:spring-core:4.1.6.RELEASE
|    |    \--- org.springframework:spring-expression:4.1.6.RELEASE
|    |         \--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-expression:4.1.6.RELEASE (*)
|    \--- org.springframework:spring-web:4.1.6.RELEASE
|         +--- org.springframework:spring-aop:4.1.6.RELEASE (*)
|         +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|         +--- org.springframework:spring-context:4.1.6.RELEASE (*)
|         \--- org.springframework:spring-core:4.1.6.RELEASE
+--- org.hsqldb:hsqldb:2.3.2
\--- javax.servlet:servlet-api:2.5

default - Configuration for default artifacts.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
...

providedCompile - Additional compile classpath for libraries that should not be part of the WAR arc
\--- javax.servlet:servlet-api:2.5

providedRuntime - Additional runtime classpath for libraries that should not be part of the WAR arc
\--- javax.servlet:servlet-api:2.5

runtime - Runtime classpath for source set 'main'.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
...

testCompile - Compile classpath for source set 'test'.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
...

... this report can be very large

2. gradle dependencies –configuration

Normally, we just need to see the dependencies report for a particular configuration. In below example, it displays the dependency report for “runtime” configuration only.

Terminal

$ gradle dependencies --configuration runtime

runtime - Runtime classpath for source set 'main'.
+--- org.slf4j:jcl-over-slf4j:1.7.12
|    \--- org.slf4j:slf4j-api:1.7.12
+--- ch.qos.logback:logback-classic:1.1.3
|    +--- ch.qos.logback:logback-core:1.1.3
|    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.12
+--- org.springframework:spring-webmvc:4.1.6.RELEASE
|    +--- org.springframework:spring-beans:4.1.6.RELEASE
|    |    \--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-context:4.1.6.RELEASE
|    |    +--- org.springframework:spring-aop:4.1.6.RELEASE
|    |    |    +--- aopalliance:aopalliance:1.0
|    |    |    +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|    |    |    \--- org.springframework:spring-core:4.1.6.RELEASE
|    |    +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|    |    +--- org.springframework:spring-core:4.1.6.RELEASE
|    |    \--- org.springframework:spring-expression:4.1.6.RELEASE
|    |         \--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-core:4.1.6.RELEASE
|    +--- org.springframework:spring-expression:4.1.6.RELEASE (*)
|    \--- org.springframework:spring-web:4.1.6.RELEASE
|         +--- org.springframework:spring-aop:4.1.6.RELEASE (*)
|         +--- org.springframework:spring-beans:4.1.6.RELEASE (*)
|         +--- org.springframework:spring-context:4.1.6.RELEASE (*)
|         \--- org.springframework:spring-core:4.1.6.RELEASE
+--- org.hsqldb:hsqldb:2.3.2
\--- javax.servlet:servlet-api:2.5

(*) - dependencies omitted (listed previously)

3. gradle dependencyInsight

This “insight” let you find out the relationship for a particular dependency.

3.1 In below example, both jcl-over-slf4j and logback-classic depends on slf4j-api, but there is a version conflict, and Gradle pick up the latest version slf4j-api:1.7.12.

Terminal

$ gradle dependencyInsight --dependency slf4j-api --configuration compile

org.slf4j:slf4j-api:1.7.12 (conflict resolution)
\--- org.slf4j:jcl-over-slf4j:1.7.12
     \--- compile

org.slf4j:slf4j-api:1.7.7 -> 1.7.12
\--- ch.qos.logback:logback-classic:1.1.3
     \--- compile

3.2 Yet another example, declares a Jackson 2.8.7, but Gradle picks the latest Jackson 2.9.0.pr1

build.gradle

dependencies {
    compile "com.fasterxml.jackson.core:jackson-databind:2.8.7"
    compile ('com.maxmind.geoip2:geoip2:2.8.0') //depends on 2.9.0.pr1
}
Terminal

$ gradle :dependencyInsight --configuration compile --dependency jackson-databind
:core:dependencyInsight
com.fasterxml.jackson.core:jackson-databind:2.9.0.pr1 (conflict resolution)

com.fasterxml.jackson.core:jackson-databind:2.8.2 -> 2.9.0.pr1
\--- com.maxmind.geoip2:geoip2:2.8.0
     \--- compile

com.fasterxml.jackson.core:jackson-databind:2.8.7 -> 2.9.0.pr1
\--- compile

com.fasterxml.jackson.core:jackson-databind:[2.7.0,) -> 2.9.0.pr1
\--- com.maxmind.db:maxmind-db:1.2.1
     \--- com.maxmind.geoip2:geoip2:2.8.0
          \--- compile

4. gradle dependencies multi-project

Review a multi-project example.

settings.gradle

include 'core', 'crawler', 'whois', 'web','analyzer','security'

To display the dependencies report for a subproject :


$ gradle {subproject}:dependencies

For example, display dependencies report for a subproject core :


$ gradle core:dependencies
$ gradle core:dependencies --configuration compile
$ gradle core:dependencyInsight --dependency slf4j-api --configuration compile

References

  1. Gradle user guide – listing dependencies

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

avatar
3 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
mkyongsanthoshvJoe BullGradle and JUnit example Recent comment authors
newest oldest most voted
trackback
Gradle and JUnit example

[…] Gradle display project dependency […]

santhoshv
Guest
santhoshv

This doesnt show up dependency added with fileTree

mkyong
Guest
mkyong

Do you know how to display the “dependency added with fileTree”?

Joe Bull
Guest
Joe Bull

This page would be a lot more useful if it also included examples of the dependencies that do NOT show up in report – for instance “files” or “fileTree” ones.

mkyong
Guest
mkyong

Do you know how to display it?