본문 바로가기
학습/Spring

[spring] 독립적으로 실행 가능한 JAR (Executable Jar)

by KKambi 2020. 4. 8.

자바 프로젝트 -> 독립적으로 실행 가능한 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파일을 풀어보면 확인 가능
    1. app/BOOT-INF/classes : 내가 생성한 클래스들
    2. app/BOOT-INF/libs : 의존성 라이브러리들
    3. app/META-INF/MANIFEST.MF : 어떤 런처를 쓸 지, 빌드를 어떻게 했는지 등의 정보
      • Start-Class(메인어플리케이션 클래스)를 Main-Class(런처)로 실행!

 

그런데 자바는 JAR 내부의 JAR을 읽을 수 있는 표준 방법이 없다!

  • 옛날 -> "uber jar"라고 해서 단 1개의 JAR로 통합시키는 방법
  • 스프링부트 -> 내장JAR로 묶어놓고, 읽을 수 있는 파일을 만듬 = Loader
  • @SpringBootApplication이 선언된 메인 어플리케이션을 실행하는 Loader = JarLauncher

 

 

 

댓글