학습/Spring
[spring] 독립적으로 실행 가능한 JAR (Executable Jar)
KKambi
2020. 4. 8. 20:03
자바 프로젝트 -> 독립적으로 실행 가능한 JAR
- 독립적으로 실행 가능한 웹 어플리케이션 생성
- 배포할 때 or Docker image에서 실행할 때, JAR 패키징이 유용
- 스프링부트의 주요 목표 中 하나 = Standalone application
JAR 생성하기
- [Maven] mvn clean -> mvn package
- [Gradle] gradle clean -> gradle bootJar (by spring-boot-gradle-plugin 2.0 이상)
java 명령어로 JAR 실행하기
- gradle bootJar로 생성된 JAR는 build/libs/에 위치
- JAR파일 하나에 다른 라이브러리 JAR들이 모두 포함됨
- unzip 명령어를 통해 JAR파일을 풀어보면 확인 가능
- app/BOOT-INF/classes : 내가 생성한 클래스들
- app/BOOT-INF/libs : 의존성 라이브러리들
- app/META-INF/MANIFEST.MF : 어떤 런처를 쓸 지, 빌드를 어떻게 했는지 등의 정보
- Start-Class(메인어플리케이션 클래스)를 Main-Class(런처)로 실행!
그런데 자바는 JAR 내부의 JAR을 읽을 수 있는 표준 방법이 없다!
- 옛날 -> "uber jar"라고 해서 단 1개의 JAR로 통합시키는 방법
- 스프링부트 -> 내장JAR로 묶어놓고, 읽을 수 있는 파일을 만듬 = Loader
- @SpringBootApplication이 선언된 메인 어플리케이션을 실행하는 Loader = JarLauncher