
내가 프로그래밍을 처음 시작 했을 때는 보통 IDE들을 통해 컴파일을 했다 그리고 필요로하면 jar파일같은걸 추출해서 직접 shell script를 통해 실행하곤 했다
즉 이렇게 하나의 프로젝트를 바이트코드로 변환하고 배포하고 실행하는 작업을 우리는 빌드 라고한다
Gradle은 이런 빌드자동화 툴로서 컴파일, 테스트, 배포, 의존성 관리 등과 같은 필수적인 요소들을 쉽게 구조화하여 다룰 수 있게 도와준다
Gradle은 크게 3가지로 나눌 수 있다
이 외에 JVM기반 구조라던가, 여러 IDE에서 지원한다는 점이 있다
Gradle에서의 생명주기는 Maven보다는 느슨한 관계이다 Maven은 생명주기가 하나의 빌드이며 선형적 구조이기에 이를 확장하거나 재구성하기는 어렵지만 Gradle의 빌드작업은 비선형 구조에 각 작업을 Task에게 위임하여 처리되기 때문에 유연한 빌드가 가능해져 보다 느슨한관계를 유지한다
빌드는 크게 3단계로 나뉜다
setting.gradle은 여러 모듈들을 조율하는 설정파일이다
하위 프로젝트에서는 상위 프로젝트에 setting.gradle을 참조한다
만약 존재하지 않는다면 계속 상위 프로젝트를 참조한다 이 작업을 통해 단일 구성인지도 확인할 수 있다

자바 Compile과정은 기본으로 등록되어있는 build task에 위와같은 구조로 등록되어 있다
실제 log에서도 위와같은 순서로 출력되고있는걸 볼 수 있다

Gradle은 다음과같이 Task들의 실행순서를 정할 수 있다 그러나 이는 비선형구조로 되어있다
Task는 크게 Task, Input, Output으로 나뉜다
Input을 받아들여 Action을 한뒤 Output을 내보낸다는 의미이다
Task들을 사전에 정의해둔 곳으로 사용자는 따로 Task를 추가하지 않아도 사용할 수 있다
build script에 직접적으로 Task를 추가할 수 도 있으나 Gradle 공식 홈페이지에서는 Gradle의 역할을 완전히 분리 및 구조화 시키는 buildSrc디렉토리에 생성하는걸 추천한다
한마디로 요약하면 Git이다. 즉 최신화된 내용만 반영하는 빌드방식이다
소스파일이 변경된점이 없을경우 컴파일단계는 건너뛰며 소스파일이 수정될 경우 해당부분만 재빌드하여 빌드내용을 최신화한다