이야기박스

Guava 충돌 - hadoop 라이브러리 ; maven-shade-plugin 본문

Programming Language/JAVA

Guava 충돌 - hadoop 라이브러리 ; maven-shade-plugin

박스님 2020. 6. 23. 14:00
반응형

# 개요

지난번 포스팅처럼 Guava 라이브러리 이슈가 발생하여 기록을 남깁니다.

이번에는 Exclude로 충돌되는 패키지를 제외시키는 방법이 아닌, re-packaging 방식을 사용하는 포스팅을 구성하였습니다.

 

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

# 개요 maven을 통한 개발을 진행하는 도중 아래와 같은 에러로그가 발생하였습니다. java.lang.NoSuchMethodError: com.google.common.io.ByteStreams.exhaust(Ljava/io/InputStream;)J 알아보니 위 패키지는 gu..

box0830.tistory.com

 

# 에러 로그

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

 

hadoop guava 버전 충돌

maven guava 버전을 20.0으로 올리고 map reduce 작업을 돌리는데 자꾸 이전 버전을 타는 문제가 발생했다. 문제는 정확히 아래와 같다. 목표는 입력 url에서 top Domain을 뽑아내기 위함임. top Domain을 뽑기

yujuwon.tistory.com

https://javacan.tistory.com/entry/mavenshadeplugin

 

maven-shade-plugin 소개 (메이븐 재패키지 repackage)

모든 개발팀에 공유할 연동 모듈이 HttpClient를 사용한다고 하자. 이 모듈은 HttpClient 3 버전을 사용해서 개발하고 있다. 열심히 개발해서 이 모듈을 배포했다. 그런데 문제가 생겼다. 어떤 팀은 이�

javacan.tistory.com

 

반응형