이야기박스

Maven: NoSuchMethodError. Guava 라이브러리 충돌 본문

Programming Language/JAVA

Maven: NoSuchMethodError. Guava 라이브러리 충돌

박스님 2020. 1. 10. 18:11
반응형

 

# 개요

maven을 통한 개발을 진행하는 도중 아래와 같은 에러로그가 발생하였습니다.

java.lang.NoSuchMethodError: com.google.common.io.ByteStreams.exhaust(Ljava/io/InputStream;)J

알아보니 위 패키지는 guava에 포함되는 패키지이고 라이브러리 충돌로 인해 자주 발생하는 이슈였습니다.

 

Stackoverflow Reference

 

java.lang.NoSuchMethodError: com.google.common.io.Closeables.closeQuietly(Ljava/io/Closeable;)V

I am new to selenium.I am getting some issues while using Selenium WebDriver. I want to open website using Selenium WebDriver like www.filpkart.com My Code package com.screen; import org.openqa.

stackoverflow.com

# 분석

각종 라이브러리의 종속성을 확인하기 위하여 아래 maven 명령어를 실행합니다.

mvn dependency:tree

명령어 실행 결과입니다.

[INFO] +- org.apache.hadoop:hadoop-common:jar:2.7.2:compile
[INFO] |  +- com.google.guava:guava:jar:28.1-android:compile
[INFO] |  |  +- com.google.guava:failureaccess:jar:1.0.1:compile
[INFO] |  |  +- com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava:compile
[INFO] |  |  +- org.checkerframework:checker-compat-qual:jar:2.5.5:compile
[INFO] |  |  +- com.google.errorprone:error_prone_annotations:jar:2.3.2:compile
[INFO] |  |  +- com.google.j2objc:j2objc-annotations:jar:1.3:compile
[INFO] |  |  \- org.codehaus.mojo:animal-sniffer-annotations:jar:1.18:compile
[INFO] |  +- org.apache.commons:commons-math3:jar:3.1.1:compile
[INFO] |  +- commons-net:commons-net:jar:3.1:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.2.2:compile

.....

hadoop-common 라이브러리 밑에 종속되는 guava가 생성되어 있었습니다.  이로 인해 원하는 버전의 guava 라이브러리가 생성되지 않았기 때문에 발생한 이슈였습니다.

 

참고

아래 명령어를 통해서도 충돌난 라이브러리들을 확인할 수 있습니다.

mvn dependency:tree -Dverbose

# 조치

hadoop-common 라이브러리에 guava를 exclusion을 해줌으로서 해결하였습니다.

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

반응형