728x90
반응형

Spring Project를 진행하다 보면 `SLF4J: Class path contains multiple SLF4J bindings.` 라는 Warning 메세지를 볼 수 있다. 

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/kimseunghwan/.m2/repository/ch/qos/logback/logback-classic/1.2.9/logback-classic-1.2.9.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/kimseunghwan/.m2/repository/org/slf4j/slf4j-simple/1.7.32/slf4j-simple-1.7.32.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

 

이런 Warning 메세지는 Dependecy 내부에서 같은 Dependecy지만 다른 버전을 Dependency 내부에서 참조를 하고 있으면 발생하게 된다. 이를 해결하기 위해서는 아래와 같은 방법을 사용하면 된다. 

 

Dependecy tree 확인

현재 어떤 Dependecy가 충돌되는 Dependency를 참조하고 있는지 모르기 때문에 `mvn dependecy:tree`로 현재 내가 사용하고 있는 Dependecy를 확인한다. 

$ mvn dependecy:tree

IDE에서 확인하는 방법 (Intellij)

 

나의 경우에는 아래와 같이 Spring boot 와 Embedded-redis에서 충돌이 발생하고 있다. 

[INFO] io.coolexplorer:spring-boot-session:war:0.0.1-SNAPSHOT
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.6.2:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:2.6.2:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.6.2:compile
[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.2.9:compile
[INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.2.9:compile
[INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.17.0:compile
[INFO] |  |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.17.0:compile
[INFO] |  |  |  \- org.slf4j:jul-to-slf4j:jar:1.7.32:compile
...
[INFO] \- it.ozimov:embedded-redis:jar:0.7.3:test
[INFO]    +- com.google.guava:guava:jar:21.0:test
[INFO]    +- commons-io:commons-io:jar:2.5:test
[INFO]    +- org.slf4j:slf4j-simple:jar:1.7.32:test
[INFO]    \- commons-logging:commons-logging:jar:1.2:test

 

Dependency 제외

해결 방법은 충돌하고 있는 두 Dependency중 한 부분에서 제외를 시켜주는 것이다. 나의 경우에는 Embedded-redis에서 제외를 시켜 주었다. 

변경된 pom.xml - <exclusions> 블럭이 추가되었다. 

<dependency>
    <groupId>it.ozimov</groupId>
    <artifactId>embedded-redis</artifactId>
    <version>${embedded.redis.version}</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
        </exclusion>
    </exclusions>
</dependency>

 

간단하게 해결!

728x90
반응형

+ Recent posts