Home » Java » Core Java » How to exclude libraries from all dependencies in Gradle

About Idan Fridman

Idan Fridman
Idan is Software engineer with experience in Server side technologies. Idan is responsible for various infrastructure models in the software industry(Telecommunications, Finance).

How to exclude libraries from all dependencies in Gradle

I am using Spring boot. Spring boot by default comes with logback. I wanted to use log4j (for whatever reasons..)

In order to do that I had to exclude logback and add new log4j dependencies:

Logback is “hidden” inside this package:

compile("org.springframework.boot:spring-boot-starter:$project.ext.springBootVersion")
 {
 exclude module: 'org.springframework.boot:spring-boot-starter-logging'
}

compile("org.springframework.boot:spring-boot-starter-log4j:$project.ext.springBatchVersion")

Now when you try to run app you get this Exception:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/dev/caches/modules-2/files-2.1/org.slf4j/slf4j-log4j12/1.7.10/b3eeae7d1765f988a1f45ea81517191315c69c9e/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/dev/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.1.2/b316e9737eea25e9ddd6d88eaeee76878045c6b2/logback-classic-1.1.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

Now we have to look at Gradle’s dependencies tree to see where logback is hidden in order to eliminate it.

Simple command to see gradle’s dependencies tree:

gradle -q dependencies web:dependencies --configuration compile

* web stands for your module name.

Snap view of the output:

Project :web - web
 ------------------------------------------------------------

 compile - Compile classpath for source set 'main'.
 +--- org.springframework.boot:spring-boot-starter-actuator:1.2.2.RELEASE
 | +--- org.springframework.boot:spring-boot-starter:1.2.2.RELEASE
 | | +--- org.springframework.boot:spring-boot:1.2.2.RELEASE
 | | | +--- org.springframework:spring-core:4.1.5.RELEASE
 | | | | \--- commons-logging:commons-logging:1.2
 | | | \--- org.springframework:spring-context:4.1.5.RELEASE
 | | | +--- org.springframework:spring-aop:4.1.5.RELEASE
 | | | | +--- aopalliance:aopalliance:1.0
 | | | | +--- org.springframework:spring-beans:4.1.5.RELEASE
 | | | | | \--- org.springframework:spring-core:4.1.5.RELEASE (*)
 | | | | \--- org.springframework:spring-core:4.1.5.RELEASE (*)
 | | | +--- org.springframework:spring-beans:4.1.5.RELEASE (*)
 | | | +--- org.springframework:spring-core:4.1.5.RELEASE (*)
 | | | \--- org.springframework:spring-expression:4.1.5.RELEASE
 | | | \--- org.springframework:spring-core:4.1.5.RELEASE (*)
 | | +--- org.springframework.boot:spring-boot-autoconfigure:1.2.2.RELEASE
 | | | +--- org.springframework.boot:spring-boot:1.2.2.RELEASE (*)
 | | | \--- org.yaml:snakeyaml:1.14
 | | +--- org.springframework.boot:spring-boot-starter-logging:1.2.2.RELEASE
 | | | +--- org.slf4j:jcl-over-slf4j:1.7.10
 | | | | \--- org.slf4j:slf4j-api:1.7.10
 | | | +--- org.slf4j:jul-to-slf4j:1.7.10
 | | | | \--- org.slf4j:slf4j-api:1.7.10
 | | | +--- org.slf4j:log4j-over-slf4j:1.7.10
 | | | | \--- org.slf4j:slf4j-api:1.7.10
 | | | \--- mycompany:logback-classic:1.1.2
 | | | +--- mycompany:logback-core:1.1.2
 | | | \--- org.slf4j:slf4j-api:1.7.6 -> 1.7.10
 | | +--- org.springframework:spring-core:4.1.5.RELEASE (*)
 | | \--- org.yaml:snakeyaml:1.14
 | +--- org.springframework.boot:spring-boot-actuator:1.2.2.RELEASE

We can find one of the instances of logback popping up from one of our dependencies:

mycompany:logback-core:1.1.2

(I found logback show’s  in other dependencies).

Now we have two options:

  1. Exclude each logback’s route with-in the indecencies tree
  2. Use configuration-wide exclusion (the easier way)

So go to your build.gradle and add this:

configurations {
 compile.exclude group:'ch.qos.logback'
}

Thats it. Your nightmare is over. If you check the dependencies tree again you wont see any existence of logback anymore.

(0 rating, 0 votes)
You need to be a registered member to rate this.
Start the discussion Views Tweet it!
Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments