[gradle] fat-jar 생성

seheo·2023년 5월 6일
0

fat-jar란?

모든 의존성에 있는 라이브러리가 자체 포함되어 있는 JAR 파일을 뜻한다. Fat JAR는 java -jar 명령어로 단독 실행할 수 있다.

  • spring boot는 기본적으로 build를 할때 자동으로 참조되는 라이브러리를 넣어 fat jar 파일로 만들어 준다.

문제점

Spring boot 프로젝트가 아닌 java 파일로 만들고 gRPC로 통신하는 프로젝트를 하다 build하고 Docker Hub에 올릴려고 했는데, build하고 실행해보니

이러한 오류가 떴다.

jar 파일의 용량과 에러메시지를 보고 라이브러리를 포함하지 못하고 있다고 생각하여 fat-jar를 만드는 방법에 대해 찾아보고 해결하였다.

jar {
		...
		duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
		...
}

configurations.runtimeClasspath.collect

  • 실행에 필요한 모든 라이브러리의 경로를 가져온다

it.isDirectory() ? it : zipTree(it)는

  • 해당 경로가 디렉토리인 경우에는 그대로 사용
  • 파일인 경우에는 압축 파일로 변환하여 사용

duplicatesStrategy

  • 중복된 파일을 어떻게 처리할 것 인지를 지정하는 속성
  • 모든 라이브러리를 경로를 가져오고 나서 중복된 라이브러리 충돌 오류가 나서 추가해주었다.

느낀점

spring boot에서 build 파일을 만들어 줬을때 fat-jar 파일로 생성해주었기 때문에 gradle의 기본값이 fat-jar라고 생각하고 있었다. spring boot가 어떤 편의를 제공하는지도 잘 모르고 gradle에 대해서도 잘 몰라서 사소한 문제로 삽질을 많이한것 같다 ㅠ

0개의 댓글