*-plain.jar 빌드되지 않게 하기

Spring Boot 2에 포함된 Gradle(이하 그레이들) 플러그인이 2.5 버전부터 두 개의 jar 파일을 빌드하도록 변경되었다고 한다.

일반 jar와 끝에 -plain이 붙은 jar 파일 두 개가 생성된다

구글링을 해보니, 끝에 -plain이 붙는 jar 파일은 애플리케이션 실행에 필요한 런타임 의존성이 제거된 jar 파일이라고 한다. 런타임 의존성이 제거가 됐기 때문에, 우리가 jar 파일을 실행할 때 쓰는 명령어인 java -jar 로 실행이 불가능하다. 이렇게 런타임 의존성이 제거된 jar를 thin jar라고 부른다.

thin jar를 만드는 이유는 마이크로서비스 때문이라고 한다. 마이크로서비스 특성 상 여러 개의 서버 혹은 컨테이너에 jar를 배포해야만 한다. 이 때문에 배포 과정에서의 자원 낭비를 줄이고자 생성된 thin jar 파일만 배포한다. thin jar가 배포되면 해당 서버 혹은 컨테이너에서 이미 로컬에 존재하는 런타임 의존성을 다시 추가하는 방식으로 자원을 절약할 수 있다고 한다.

하지만 마이크로서비스 환경이 아니라면 굳이 thin jar가 생성되게 할 이유가 없다. 따라서 thin jar 파일의 생성이 불필요하다면, 해당 파일이 생성되지 않게 하는 게 관리 측면에서 좋다. 나는 그레이들을 사용하고 있으니 build.gradle 파일을 열어주어 아래의 스크립트를 추가해 주었다.

jar {
    enabled = false
}

thin jar는 그레이들의 빌드 라이프사이클 중 jar 단계에서 생성되기 때문에, 해당 단계를 그냥 disabled 처리하면 된다. 이렇게 설정해주면 아래와 같이 -plain 이 붙는 jar 파일이 생성되지 않는다.


참고한 문헌 및 블로그 글

  1. [SpringBoot 2.5↑] 빌드 시 2가지 jar가 생성되는 현상 (executable jar & plain jar) — ROOPRETELCHAM (tistory.com)