-
Plain jar vs Executable jar(feat. plain jar 생성 방지)자바/스프링 2021. 11. 8. 23:38
스프링 부트 gradle 플러그인 2.5 버전부터 gradle 빌드 시 JAR 파일이 2개 생성된다.
별도의 설정을 하지 않았을 때 하나는 "프로젝트 이름-버전.jar",
다른 하나는 "프로젝트 이름-버전-plain.jar"이라는 이름을 가진다.
Plain Archive
"-plain"이 붙은 jar 파일을 "plain archive"라고 한다.
(여기서 archive는 jar이든 war이든 빌드 결과물을 의미한다.)
plain archive는 gradle의 "jar" task로 생성된다.
plain archive는 어플리케이션 실행에 필요한 모든 의존성을 포함하지 않고,
작성된 소스코드의 클래스 파일과 리소스 파일만 포함한다.
이렇게 생성된 jar 파일을 "plain jar", "standard jar", "thin jar"라고 한다.
모든 의존성이 존재하는 게 아니기 때문에 plain jar는 "java -jar" 명령어로 실행 시 에러가 발생한다.(여기서 archive는 jar이든 war이든 빌드 결과물을 의미한다.)
plain archive는 gradle의 "jar" task로 생성된다.
plain archive는 어플리케이션 실행에 필요한 모든 의존성을 포함하지 않고,
작성된 소스코드의 클래스 파일과 리소스 파일만 포함한다.
이렇게 생성된 jar 파일을 "plain jar", "standard jar", "thin jar"라고 한다.
모든 의존성이 존재하는 게 아니기 때문에 plain jar는 "java -jar" 명령어로 실행 시 에러가 발생한다.
Executable Archive
반면 "-plain" 키워드가 없는 jar 파일은 "executable archive"라고 하며,
어플리케이션 실행에 필요한 모든 의존성을 함께 빌드한다.
executable acrchive는 gradle의 "bootJar" task로 생성된다.
이렇게 생성된 "executable jar"는 "fat jar"라고도 한다.
모든 의존성을 포함하기 때문에 "java -jar" 명령어를 통해 실행이 가능하다.
빌드 시 plain jar 생성하지 않도록 설정하기
build.gradle 파일에 아래와 같이 설정을 추가하면 executable jar 파일만 생성된다.
plugins { ... } ... jar { enabled = false } ...
참고자료
'자바 > 스프링' 카테고리의 다른 글
Spring Data JPA 페이징과 정렬 (0) 2021.10.12 Spring Data JPA DTO 사용 시 매핑 에러가 발생할 때(org.springframework.data.mapping.PropertyReferenceException: No property ...) (0) 2021.10.08 스프링부트 H2 데이터베이스 설정 방법 (1) 2021.10.04 스프링부트 profile 설정 방법 (0) 2021.10.03