해당 내용은 Gradle 공식 홈페이지의 내용을 정리한 내용입니다.
Gradle은 유연한 오픈 소스 빌드 자동화 도구입니다.
빌드 자동화라는 의미는 소스 코드 컴파일, 패키징, 테스크 실행 등 일련의 작업을 통해 빌드 생성을 자동화하는 기술을 의미합니다.
Gradle의 특징은 다음과 같습니다.
고성능(High performance)
JVM(JVM foundation)
관례(Conventions)
확장성(Extensibility)
IDE 지원
통찰력(Insight)
Build scan
을 통해 빌드 문제를 식별하는 데 사용할 수 있는 빌드 실행에 대한 광범위한 정보를 제공합니다.범용 빌드 도구이기 때문에 빌드하려는 대상이나 수행 방법에 대해 거의 가정하지 않기 때문에 모든 소프트웨어를 빌드할 수 있지만, 빌드하려는 대상을 구체화하는 단계가 필요하다는 의미입니다.
그렇기 때문에 Gradle의 프로젝트도 Gradle로 수행하는 작업에 따라 다르다는 상당히 모호한 특징을 갖게 됩니다.
이 경우 Gradle의 빌드 별 관례(build-by-convention)에 의해 프로젝트가 구체적으로 정의할 수 있습니다.
종속성 관리의 경우 Maven 및 lvy 호환 리포지토리와 파일 시스템만 지원합니다.
Gradle은 빌드는 태스크(작업 단위)의 방향성 비순환 그래프(DAG)로 모델링합니다.
이는 빌드가 기본적으로 작업 세트를 구성하고 종속성을 기반으로 함께 연결하여 해당 DAG를 생성한다는 것입니다.
작업 그래프가 생성되면 Gradle은 어떤 태스크를 어떤 순서로 실행해야 하는지 결졍한 다음 빌드를 진행합니다.
좌측은 추상적인 그래프이고 우측은 구체적(Java Plugin)인 그래프입니다.
모든 빌드 프로세스는 이러한 방식으로 작업 그래프로 모델링할 수 있으며, 이것이 Gradle이 유연한 이유입니다.
이러한 작업 그래프는 작업 종속성 메커니즘(dependsOn)을 통해 연결된 태스크와 함께 플러그인이나 자체 빌드 스크립트로 정의할 수 있습니다.
태스크는 다음과 같이 구성됩니다.
물론 모든 태스크가 Action을 가지고 있는 것은 아닙니다.
표준 수명 주기 작업과 같은 일부 작업에는 Action이 존재하지 않습니다.
세 가지 고정 빌드 단계가 존재합니다.
구성 단계의 경우 빌드가 실행될 때마다 모든 태스크가 프로젝트에 포함되기 때문에 구성 단계에서 비용이 많이 드는 태스크는 사용하지 않는 편이 좋습니다.
Gradle의 경우 빌드할 때 사용자 지정 빌드 논리를 추가해야 하는 요구 사항이 존재합니다.
Gradle은 다음과 같이 확장할 수 있는 몇 가지 메커니즘을 제공합니다.
buildSrc
디렉토리 또는 패키지된 플러그인 안에 추가합니다.Task.doFirst()
나 Task.doLast()
메소드를 통해 태스크 전후에 실행되는 사용자 지정 빌드 로직을 연결할 수 있습니다.Gradle을 단순히 빌드 스크립트를 실행 가능한 코드로 보는 것이 아니라, 구현하기 위한 세부 정보는 사용자 정의 태스크 유형 및 플러그인에 대한 태스크가 필요합니다.
그러나 빌드 스크립트를 실행 가능한 코드로 보는 시점이 유용한 한 가지 영역이 있는데, 이는 빌드 스크립트의 구문이 Gradle API에 매핑되는 방식을 이해하는 것입니다.
Groovy DSL Reference와 Javadocs로 구성된 API를 통해 메소드의 속성을 나열하고 클로저와 태스크를 참조할 수 있습니다.