bootJar vs jar(plainJar)

hoyong.eom·2024년 10월 13일

자바

목록 보기
3/5
post-thumbnail

토이 프로젝트에서 MonorRepo 프로젝트 형태로 진행중 라이브러리 형태의 Jar 파일이 필요하게 됐다.
다른 개발자 분들이 빌드 환경을 만들어주고 사용만 했었지, 라이브러리 빌드 구성을 해본적이 없어 이 과정에서 공부한 내용을 정리하고자 포스팅 한다.

여러 tistory, velog를 찾다보면 plain.jar 와 bootJar에 대한 비교글이 많이 보인다. 나 역시 김영한님 강의를 수강했을때, plain.jar에 대해서 들어봤던 기억이 난다.(꽤나 옛날 일인데.. 기억이 난다..)

일반적으로 gradle Task에서 build를 수행하면 아래와 같이 bootJar와 plainJar가 생성된다.

📌bootJar(Executable Jar)

bootJar는 실행 가능한 jar 파일을 생성한다.
위 첨부된 traffic-api-0.0.1-SNAPSHOT.jartraffic-api-0.0.1-SNAPSHOT-plain.jar 의 파일 크기 차이도 매우 큰걸 알 수 있다.

bootJar Task를 이용해서 생성된 Jar 파일은 Executable Jar 파일이라고 부르며, 이 jar 파일은 java -jar 명령어로 실행시키면 애플리케이션 구동된다. 그 이유는 이 jar에 애플리케이션을 구동시키기 위해 필요한 모든 의존성을 포함하고 있기 때문이다.

실제로 jar파일을 압축 해제해서 보면 아래와 같이 BOOT-INF, META-INF가 존재하고 BOOT-INF 내부에 여러 jar가 함께 포함되어 있는걸 확인해볼 수 있다.

📌jar(Plain Jar)

Executable Jar와 달리 Plain.jar 파일은 다른 의존성을 포함하지 않고 오직 클래스와 리소스파일만 존재했다.

따라서, Plain Jar파일은 java -jar 명령어로 실행이 불가능하게 된다.

그렇기 때문에 lain Jar 파일은 라이브러리 모듈에서 사용할 수있다.

참고

https://www.devkuma.com/docs/gradle/bootjar-jar/
https://dev-j.tistory.com/22
https://velog.io/@shawnhansh/SpringBoot-Executable-jar-plain-jar

0개의 댓글