Статьи

Как исключить библиотеки из всех зависимостей в Gradle

Я использую Spring boot. Spring boot по умолчанию поставляется с logback. Я хотел использовать log4j (по любым причинам ..)

Для этого мне пришлось исключить logback и добавить новые зависимости log4j:

Logback «скрыт» внутри этого пакета:

1
2
3
4
5
6
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")

Теперь, когда вы пытаетесь запустить приложение, вы получаете это исключение:

1
2
3
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]

Теперь нам нужно взглянуть на дерево зависимостей Gradle, чтобы увидеть, где logback скрыт, чтобы устранить его.

Простая команда для просмотра дерева зависимостей gradle:

1
gradle -q dependencies web:dependencies --configuration compile

* web означает название вашего модуля.

Привязка просмотра вывода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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

Мы можем найти один из случаев возврата из одной из наших зависимостей:

1
mycompany:logback-core:1.1.2

(Я нашел logback show’s в других зависимостях).

Теперь у нас есть два варианта:

  1. Исключить маршрут каждого входа обратно в дерево непристойностей
  2. Используйте исключение для всей конфигурации (более простой способ)

Итак, зайдите в свой build.gradle и добавьте это:

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

Это оно. Твой кошмар окончен. Если вы снова проверите дерево зависимостей, вы больше не увидите существования logback.

Ссылка: Как исключить библиотеки из всех зависимостей в Gradle от нашего партнера по JCG Идана Фридмана в блоге IdanFridman.com .