jar 파일 이름 변경해서 빌드하기

스프링 부트 2 프로젝트를 빌드 한다면 보통, Gradle(이하 그레이들)이나 Maven을 이용해 빌드하게 될 것이다. 나 같은 경우에는 그레이들을 사용해서 빌드하고 있는데, 문제는 빌드 결과물인 jar 파일의 이름이 불필요 할 정도로 길다는 점이었다. 일반적으로 프로젝트를 빌드하면, 다음과 같은 규칙으로 jar 파일 명이 결정된다.

<프로젝트 명>-<버전>.jar

예를 들어 프로젝트 명이 test 이고, 그레이들에 기술된 버전이 0.0.1-SNAPSHOT 이라면,

test-0.0.1-SNAPSHOT.jar

...라는 이름으로 jar 파일 명이 결정된다. 이런 식으로 이름이 생성되는 이유가 있는데, 해당 jar 파일이 다른 프로젝트에 포함되어 사용되는 라이브러리인 경우에는 식별을 위해 뒤에 버전이 추가로 붙는 것이다. (EX. spring-boot-2.7.2.jar)

이 때문에, 프로젝트를 빌드 해보면 아래와 같이 0.0.1-SNAPSHOT이 붙은 jar 파일이 생성되는 것을 볼 수 있다.

0.0.1-SNAPSHOT은 처음 프로젝트를 생성할 때 기본으로 붙는 버전이다

하지만 다른 프로젝트에 포함 시킬 것도 아닌 빌드 결과물에 버전을 기술하는 것은 배포 시 일만 늘릴 뿐이다. 따라서 나는 jar 파일 명에 프로젝트 명만 뜨도록 설정을 변경하려고 한다. 우선 그레이들을 이용한 스프링 부트 2 프로젝트를 생성하면 루트 디렉토리에 아래와 같이 build.gradle, settings.gradle 파일 두 개가 보일 것이다.

settings.gradle 에는 스프링 부트 2 프로젝트를 생성하면서 입력한 프로젝트 명이 기술되어 있다.

내 프로젝트 명은 bookmanagement다

그렇다면, 이제 bookmanagement.jar 라는 이름을 가진 빌드 결과물이 생성되도록 build.gradle 설정을 변경해 보겠다. build.gradle를 연 다음, 아래의 내용을 추가하자.

bootJar {
    archiveFileName = "${rootProject.name}.jar"
}

위의 내용을 추가하고 다시 빌드 해보면, 아래와 같이 bookmanagement.jar 라는 이름의 파일이 생성된 것을 볼 수 있다.

대충 눈치챈 사람들도 있겠지만, settings.gradle에 기술된 rootProject.name의 값을 가져와 파일 명으로 사용한 것이다. 그런데 한 가지 더 거슬리는 점이 있는데, 끝에 -plain이 붙는 jar 파일이다. 이 jar 파일은 무엇이고, 또 어떻게 없애는지는 아래의 글을 참조하도록 하자.

[Gradle] *-plain.jar 빌드되지 않게 하기
Spring Boot 2에 포함된 Gradle(이하 그레이들) 플러그인이 2.5 버전부터 두 개의 jar 파일을 빌드하도록 변경되었다고 한다. 구글링을 해보니, 끝에 -plain이 붙는 jar 파일은 애플리케이션 실행에 필요한 런타임 의존성이 제거된 jar 파일이라고 한다. 런타임 의존성이 제거가 됐기 때문에, 우리가 jar 파일을 실행할 때 쓰는 명령어인 java -jar 로 실행이