Java에서는 Apache Ant 빌드도구가 2000년에 등장 하였고 표준 빌드도구로 사용되고 있다가 Apache Maven이 등장하였다. Maven은 현 시점에서도 사실상 명실상부한 Java 표준 빌드도구라고 할 수 있다.
그렇게 마땅한 적수가 없던 Maven이였지만, 어느 날 Gradle이라는 빌드도구가 세상에 나오게 되고 현재까지 Gradle은 견고했던 Maven의 아성을 무너트리고 있다.
Gradle이란?
Gradle은 Groovy를 기반으로 한 오픈소스 빌드 도구이다.
Ant의 자유도와 Maven의 관례를 통한 접근성을 바탕으로 이전 빌드툴의 단점을 보완하여 개선된 서비스를 제공한다.
현재 스프링 오픈소스 프로젝트와 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다.
Gradle의 특징
- Ant처럼 매우 유연한 범용 빌드 도구이다.
- Maven과 같은 구조화 된 Build Framework이다. (구조의 전환이 가능)
- Maven, Ivy등의 기존 저장소 인프라 또는 pom.xml 파일과 ivy.xml 파일에 대한 Migration의 편의성이 제공된다.
- Muilti Project 빌드를 지원한다.
- Dependency 관리의 다양한 방법을 제공한다.
- Build Script를 xml이 아닌 Groovy기반의 DSL(Domain Specific Language)을 사용한다.
- 기존 Build를 구성하기 위한 풍부한 도메인 모델이 제공된다.
- Gradle 설치 없이 Gradle Wrapper를 이용하여 빌드를 지원한다.
Gradle의 장점
Apache Ant, Apache Maven과 같은 기존의 빌드툴은 xml형식을 이용하여 정적인 설정정보를 구성한다.
Gradle은 Groovy라는 스크립트 언어를 이용하여 코드로서 설정정보를 구성하기 떄문에 구조적인 장점이 있다.
- xml의 구조적인 틀을 벗어나 코딩에 의한 간결한 정의가 가능하다.
- 프로젝트를 설정주입방식으로 정의하기 때문에 Maven의 상속 구조보다 재사용에 용의하다.
Gradle의 기본구조
모든 Gradle Script는 하나 이상의 project로 구성되며, 모든 프로젝트는 하나이상의 Task로 구성된다.
- Project : 소스를 jar로 모으거나, Java Project를 컴파일하거나, 테스트를 실행하고, 어플리케이션을 배포하는 등의 업무로 구성된다.
- Task : 작업의 최소단위. Task간 의존관계 설정과 함께 흐름에 따른 구성이 가능하며, 동적인 Task의 생성도 가능하다.
Gradle은 자바6버전 이상의 Virtual Machine 환경에서 사용이 가능하며, 직접 설치를 하거나 Gradle Wrapper를 이용하여 설치를 하지 않고 실행환경을 구성할 수 있다.
Gradle Buile Lifecycle
- 초기화(Initialization) : 빌드 대상 프로젝트를 결정하고 각각에 대한 Project 객체를 생성. settings.gradle 파일에서 프로젝트를 구성한다. (Multi, Single Project를 구분)
- 구성(Configuration) : 빌드 대상이 되는 모든 프로젝트의 빌드 스크립트를 실행 (프로젝트 객체 구성)
- 실행(Execution) : 구성 단계에서 생성하고 설정된 프로젝트의 Task 중에 실행 대상을 결정한다. gradle 명령행에서 지정한 Task이름 파라미터와 현재 디렉토리를 기반으로 Task를 결정하여 선택된 Task를 실행한다.