이야기박스
Guava 충돌 - hadoop 라이브러리 ; maven-shade-plugin 본문
반응형
# 개요
지난번 포스팅처럼 Guava 라이브러리 이슈가 발생하여 기록을 남깁니다.
이번에는 Exclude로 충돌되는 패키지를 제외시키는 방법이 아닌, re-packaging 방식을 사용하는 포스팅을 구성하였습니다.
# 에러 로그
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.cache.CacheBuilder.expireAfterWrite(Ljava/time/Duration;)Lcom/google/common/cache/CacheBuilder;
at com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl.<init>
확인 결과, 이전에 사용 중인 Hadoop 라이브러리와 충돌로 인해 발생한 문제였습니다.
# 조치
기존에 사용하던 하둡 라이브러리를 그대로 유지하며 새로운 라이브러리의 리패키징을 합니다. 플러그인은 maven-shade-plugin을 사용하였습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<outputFile>
${project.build.directory}/${project.artifactId}-${project.version}-jar-with-dependencies.jar
</outputFile>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<artifactSet>
<includes>
<include>*:*</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>org.joda</pattern>
<shadedPattern>com.amazonaws.thirdparty.joda</shadedPattern>
</relocation>
<relocation>
<pattern>com.google.common</pattern>
<shadedPattern>shaded.com.google.common</shadedPattern>
</relocation>
</relocations>
<shadedArtifactAttached>true</shadedArtifactAttached>
</configuration>
</execution>
</executions>
</plugin>
# 참고
https://yujuwon.tistory.com/entry/hadoop-guava-%EB%B2%84%EC%A0%84-%EC%B6%A9%EB%8F%8C
https://javacan.tistory.com/entry/mavenshadeplugin
반응형
'Programming Language > JAVA' 카테고리의 다른 글
Maven: NoSuchMethodError. Guava 라이브러리 충돌 (0) | 2020.01.10 |
---|---|
(작성중) Maven Lifecycle (0) | 2019.11.21 |
(작성중) Maven Repository (0) | 2019.11.19 |
Java) 하노이의 탑 < 완성본 > (7) | 2019.06.02 |
Java) 하이로우 게임 (1) | 2019.06.02 |