본문 바로가기
기술 부채 상환 중....

Spring Boot Gradle Plugin Reference Guide

by 닮은 2018. 5. 3.

 

원문

소개

스프링 부트 그레들 플러그인은 그레들에서 스프링 부트를 지원하고, 실행가능한 jar (또는 war 아카이브)를 패키징 하고, 스프링 부트 어플리케이션을 실행하고 spring-boot-dependencies가 제공하는 의존성 관리를 사용할 수 있게 해준다.

시작하기

buildscript {
    repositories {
        maven { url 'https://repo.spring.io/libs-snapshot' }
    }

    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.1.0.BUILD-SNAPSHOT'
    }
}

apply plugin: 'org.springframework.boot'

별로 변화가 없는 것 같지만, 이 플러그인은 다른 플러그인이 적용되는지 탐지하고 적절하게 반응한다고 한다. groovy, java, kotlin 플러그인과 io.spring.dependency-management 플러그인은 최소한으로 적용해야 한다. (??)

apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'

의존성 관리하기

io.spring.dependency-management 플러그인을 적용하면 스프링 부트 플러그인이 자동으로 알맞는 버전의 spring-boot-dependencies bom을 가져온다. 의존성을 가져올 때 버전을 생략해도 된다는 말인 것 같다.

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
}

관리되는 버전 직접 정의하기

해당하는 속성을 설정해주면 된다.

ext['slf4j.version'] = '1.7.20'

고립적으로 부트의 의존성 관리 사용하기

스프링 부트 의존성 관리는 그 프로젝트에 스프링 부트 플러그인을 적용하지 않고도 쓸 수 있다. SpringBootPlugin 클래스는 BOM_COORDINATES 상수를 제공하는데, group id, artifact id, 버전을 알 필요 없이 사용된다.

일단은 설정만 하고, 적용하지 않는다.

buildscript {
    repositories {
        maven { url 'https://repo.spring.io/libs-snapshot' }
    }

    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.1.0.BUILD-SNAPSHOT'
    }
}

의존성 관리 플러그인에서의 스프릥 부트 플러그인 의존성이라는 것은, 의존성 선언 없이 의존성 관리 플러그인을 사용할 수 있다는 뜻이다. 이것은 또한, 스프링 부트에서와 같은 의존성 관리 플러그인을 자동으로 사용한다는 의미이다.

의존성 관리 플러그인을 적용하고, 스프링 부트의 bom을 임포트 하자.

apply plugin: 'io.spring.dependency-management'

dependencyManagement {
    imports {
        mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    }
}

더 자세한 것

의존성 관리 플러그인의 기능에 대한 자세한 내용은 여기를 참조한다.

실행 파일 아카이브로 패키징하기

플러그인은 java -jar로 실행 가능한 파일 아카이브를 생성해 준다.

jar로 패키징하기

실행가능한 jar는 bootJar 태스크를 통해 빌드 된다. 이 태스크는 java 플러그인이 적용 될 때 생성되며, BootJar의 인스턴스이다. assemble 태스크는 bootJar 태스크에 따라 자동적으로 설정되기 때문에 assemble(또는 build) 태스크가 실행되면 bootJar 태스크도 실행된다.

war로 패키징하기

실행가능한 war는 bootWar 태스크를 통해 빌드 된다. 이 태스크는 war 플러그인이 적용 될 때 생성되며, BootWar의 인스턴스이다. assemble 태스크는 bootWar 태스크에 따라 자동적으로 설정되기 때문에 assemble(또는 build) 태스크가 실행되면 bootWar 태스크도 실행된다.

실행가능하고 배포가능한 war 패키징하기

war 파일은 외부 컨테이너에 배포되고, java -jar를 사용하여 실행 할 수 있도록 패키지 될 수 있다. 이렇게 하기 위해서는 내장 servlet 컨테이너 의존성이 다음과 같이 providedRuntime 설정이 추가되어야 한다.

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

이렇게 함으로써, 외부 컨테이너의 원래 클래스와 war 파일의 WEB-INF/lib-provided 디렉토리 간의 충돌이 없다는 것을 보장할 수 있다.

일반 아카이브로 패키징하기

기본적으로 bootJar 또는 bootWar 태스크를 설정할 때, jar 또는 war 태스크는 비활성화 된다.