이야기박스
Maven: NoSuchMethodError. Guava 라이브러리 충돌 본문
반응형
# 개요
maven을 통한 개발을 진행하는 도중 아래와 같은 에러로그가 발생하였습니다.
java.lang.NoSuchMethodError: com.google.common.io.ByteStreams.exhaust(Ljava/io/InputStream;)J
알아보니 위 패키지는 guava에 포함되는 패키지이고 라이브러리 충돌로 인해 자주 발생하는 이슈였습니다.
# 분석
각종 라이브러리의 종속성을 확인하기 위하여 아래 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>
반응형
'Programming Language > JAVA' 카테고리의 다른 글
Guava 충돌 - hadoop 라이브러리 ; maven-shade-plugin (0) | 2020.06.23 |
---|---|
(작성중) Maven Lifecycle (0) | 2019.11.21 |
(작성중) Maven Repository (0) | 2019.11.19 |
Java) 하노이의 탑 < 완성본 > (7) | 2019.06.02 |
Java) 하이로우 게임 (1) | 2019.06.02 |