Gradle을 이용한 Spring Boot 설치 빌드 스크립트
* 이 글은 2016년 1월 개인 위키에 올렸던 글을 옮긴 것임을 알려드립니다.
공식 참조 문서의 10.1.2. Gradle installation 내용에 쓰인 빌드 스크립트(build.gradle)에 대한 설명
빌드 스크립트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
buildscript {
repositories {
jcenter()
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.1.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'spring-boot'
jar {
baseName = 'myproject'
version = '0.0.1-SNAPSHOT'
}
repositories {
jcenter()
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
buildscript 메소드
빌드 스크립트 자체를 빌드하는 과정에서 필요한 외부 라이브러리를 클래스패스에 추가하는 기능을 한다. 중괄호로 묶은 내용(closure)을 ScriptHandler로 전달한다.
ScriptHandler는 클로저(설명 TODO)를 인자로 받는 두 개의 메소드(repositories와 dependencies)를 갖고 있다. 빌드 스크립트에서 클래스패스를 추가할 경우에는 구성(configuration) 이름으로 classpath 문자열이 필요하다.
repositories 메소드
저장소 설정을 담당한다. 클로저 내용은 RepositoryHandler
를 통해 실행된다. RepositoryHandler는 메이븐 중앙 저장소 추가를 위한mavenCentral 메소드와 Bintray의 jCenter 저장소 추가를 위한 jcenter 메소드를 제공한다.
maven 메소드
메이븐 저장소 추가하고 설정한다. 클로저 안에 정의한 url 키워드는 MavenArtifactRepository의 프로퍼티로 저장소의 기초 URL로 POM이나 라이브러리(artifact)를 찾는데 쓰인다.
dependencies 메소드
프로젝트 의존성 설정을 담당한다. 클로저 내용은 DependencyHandler를 통해 실행된다. 의존성(dependency)은 구성(configuration)에 따라 묶인다. 의존성 선언은 다음과 같이 구성 이름(configurationName) 뒤에 잇따르는 의존성 표기(dependencyNotation...)로 작성한다.
1 2 3
dependencies { configurationName dependencyNotation1, dependencyNotation2, ... }
아래 예제와 같이 콜론으로 그룹:이름:버전을 나열하는 표기법(group:name:version:classifier@extension)을 사용할 수도 있고, 맵(map) 형태의 표기를 사용할 수도 있다. 그외에 특정 파일을 추가하는 것도 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
apply plugin: <span class="hl-string">'java'</span> <span class="hl-comment">//so that we can use 'compile', 'testCompile' for dependencies</span> dependencies { <span class="hl-comment">//for dependencies found in artifact repositories you can use</span> <span class="hl-comment">//the group:name:version notation</span> compile <span class="hl-string">'commons-lang:commons-lang:2.6'</span> testCompile <span class="hl-string">'org.mockito:mockito:1.9.0-rc1'</span> <span class="hl-comment">//map-style notation:</span> compile group: <span class="hl-string">'com.google.code.guice'</span>, name: <span class="hl-string">'guice'</span>, version: <span class="hl-string">'1.0'</span> <span class="hl-comment">//declaring arbitrary files as dependencies</span> compile files(<span class="hl-string">'hibernate.jar'</span>, <span class="hl-string">'libs/spring.jar'</span>) <span class="hl-comment">//putting all jars from 'libs' onto compile classpath</span> compile fileTree(<span class="hl-string">'libs'</span>) }
java 플러그인 적용
그래들은 확장을 위해 플러그인(plugin)이라는 구조물을 제공한다. 플러그인은 사전 구성한 다수의 작업을 갖고 있다. 자바 플러그인 적용을 위한 구문은 한 줄에 불과하다.
1
apply plugin: <span class="hl-string">'java'</span>
jar 작업
프로젝트를 위한 클래스와 리소스 파일을 포함하는 JAR 파일을 생성한다. baseName과 version은 JAR 파일을 위한 프로퍼티 값이다.
의존성 구성
자바 플러그인은 6개의 의존성 구성을 제공한다. 아래는 각 구성(연한 녹색)과 작업(하늘색) 사이의 관계를 그린 그림이다.
spring-boot 플러그인 적용
spring-boot 플러그인 적용을 위해서는 클래스패스에
1 2 3 4 5 6
buildscript{ dependencies{ classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.1.RELEASE") } } apply plugin:'java'