> ## Content Index
> Fetch the complete content index at: https://www.popit.kr/llms.txt
> Use this file to discover other available public pages before exploring further.

# Gradle을 이용한 Spring Boot 설치 빌드 스크립트
- URL: https://www.popit.kr/spring-boot-build-script-with-gradle/
- Published: 2017-11-25T11:15:21.000Z
- Updated: 2018-05-21T03:18:40.000Z
- Author: 안영회
- Tags: #소프트웨어, Spring Boot, Gradle, Spring

*\* 이 글은 2016년 1월 개인 위키에 올렸던 글을 옮긴 것임을 알려드립니다.*

공식 참조 문서의 [10.1.2\. Gradle installation](http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/?ref=popit.kr#getting-started-gradle-installation) 내용에 쓰인 빌드 스크립트(build.gradle)에 대한 설명

# 빌드 스크립트

**build.gradle**

```
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](https://docs.gradle.org/current/javadoc/org/gradle/api/initialization/dsl/ScriptHandler.html?ref=popit.kr)`로 전달한다. `[ScriptHandler](https://docs.gradle.org/current/javadoc/org/gradle/api/initialization/dsl/ScriptHandler.html?ref=popit.kr)는 클로저(설명 TODO)를 인자로 받는 두 개의 메소드(repositories와 dependencies)를 갖고 있다. 빌드 스크립트에서 클래스패스를 추가할 경우에는 구성(configuration) 이름으로 classpath 문자열이 필요하다.

## repositories 메소드

저장소 설정을 담당한다. 클로저 내용은 [RepositoryHandler](https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/dsl/RepositoryHandler.html?ref=popit.kr)를 통해 실행된다. [RepositoryHandler](https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/dsl/RepositoryHandler.html?ref=popit.kr)는 메이븐 중앙 저장소 추가를 위한[mavenCentral](https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/dsl/RepositoryHandler.html?ref=popit.kr#mavenCentral%28%29) 메소드와 [Bintray의 jCenter 저장소](https://bintray.com/bintray/jcenter?ref=popit.kr) 추가를 위한 [jcenter](https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/dsl/RepositoryHandler.html?ref=popit.kr#jcenter%28%29) 메소드를 제공한다.

## maven 메소드

메이븐 저장소 추가하고 설정한다. 클로저 안에 정의한 [url](https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.repositories.MavenArtifactRepository.html?ref=popit.kr#org.gradle.api.artifacts.repositories.MavenArtifactRepository:url) 키워드는 [MavenArtifactRepository](https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.repositories.MavenArtifactRepository.html?ref=popit.kr)의 프로퍼티로 저장소의 기초 URL로 POM이나 라이브러리(artifact)를 찾는데 쓰인다.

## dependencies 메소드

프로젝트 의존성 설정을 담당한다. 클로저 내용은 [DependencyHandler](https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/dsl/DependencyHandler.html?ref=popit.kr)를 통해 실행된다. 의존성(dependency)은 구성([configuration](https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.Configuration.html?ref=popit.kr))에 따라 묶인다. 의존성 선언은 다음과 같이 구성 이름(configurationName) 뒤에 잇따르는 의존성 표기(dependencyNotation...)로 작성한다.  

```
dependencies {
    configurationName dependencyNotation1, dependencyNotation2, ...
}
```

아래 예제와 같이 콜론으로 그룹:이름:버전을 나열하는 표기법(group:name:version:classifier@extension)을 사용할 수도 있고, 맵(map) 형태의 표기를 사용할 수도 있다. 그외에 특정 파일을 추가하는 것도 가능하다.  

```
apply plugin: 'java'
//so that we can use 'compile', 'testCompile' for dependencies

dependencies {
  //for dependencies found in artifact repositories you can use
  //the group:name:version notation
  compile 'commons-lang:commons-lang:2.6'
  testCompile 'org.mockito:mockito:1.9.0-rc1'

  //map-style notation:
  compile group: 'com.google.code.guice', name: 'guice', version: '1.0'

  //declaring arbitrary files as dependencies
  compile files('hibernate.jar', 'libs/spring.jar')

  //putting all jars from 'libs' onto compile classpath
  compile fileTree('libs')
}
```

## java 플러그인 적용

그래들은 확장을 위해 플러그인(plugin)이라는 구조물을 제공한다. 플러그인은 사전 구성한 다수의 작업을 갖고 있다. 자바 플러그인 적용을 위한 구문은 한 줄에 불과하다.  

```
apply plugin: 'java'
```

### jar 작업

프로젝트를 위한 클래스와 리소스 파일을 포함하는 JAR 파일을 생성한다. baseName과 version은 JAR 파일을 위한 프로퍼티 값이다.

### 의존성 구성

자바 플러그인은 [6개의 의존성 구성을 제공](https://docs.gradle.org/current/userguide/java%5Fplugin.html?ref=popit.kr)한다. 아래는 각 구성(연한 녹색)과 작업(하늘색) 사이의 관계를 그린 그림이다.

![자바 플러그인 의존성 구성](https://www.popit.kr/content/images/wp/2017/11/javaPluginConfigurations-600x160.png)

자바 플러그인 의존성 구성

## spring-boot 플러그인 적용

spring-boot 플러그인 적용을 위해서는 클래스패스에  

```
buildscript{
  dependencies{
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.1.RELEASE")
  } 
} 

apply plugin:'java'
```