Я использую 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 в других зависимостях).
Теперь у нас есть два варианта:
- Исключить маршрут каждого входа обратно в дерево непристойностей
- Используйте исключение для всей конфигурации (более простой способ)
Итак, зайдите в свой build.gradle и добавьте это:
1
2
3
|
configurations { compile.exclude group: 'ch.qos.logback' } |
Это оно. Твой кошмар окончен. Если вы снова проверите дерево зависимостей, вы больше не увидите существования logback.
Ссылка: | Как исключить библиотеки из всех зависимостей в Gradle от нашего партнера по JCG Идана Фридмана в блоге IdanFridman.com . |