Gradle을 사용하면서 복붙밖에 하지 못해 프로젝트 구성에 어려움을 겪었다.
그래서 Gradle 원리를 파악하고 Gradle 요소를 보면 다르게 보이지 않을까? 싶어서 글을 정리해보게 되었다.
Gradle: Life Cycle에서는 '빌드의 작성자라면 tasks 간에 dependencies를 정의하고 의존 순서에 맞게 실행됨을 보장해야 한다.' 라고 하고 있다. 즉 여러 테스크의 순서를 조절해 tasks를 만드는 것이다.
우선 Build Task를 실행시켜보면서 어떤일이 일어나는지 살펴보자.
Build명령을 실행시키면 기본적으로 다음과 같은 로그가 나온다.
build.gradle.kts
plugins {
id("java")
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
}
Executing 'build'...
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :jar
> Task :assemble
> Task :compileTestJava NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
> Task :check UP-TO-DATE
> Task :build
BUILD SUCCESSFUL in 98ms
2 actionable tasks: 2 executed
Execution finished 'build'.
여기서 여러 Task가 나열된 것을 볼 수 있는데, 이것이 Build Task가 실행되면서 실행된 Task 종류다.
이처럼 하나의 Task안에서도 여러가지 Task가 실행됨을 알 수 있었다.
Gradle: Life Cycle에서는 Build에 3가지 단계가 있다고 했다.
첫번째는, 초기화(Initialization). 두번째는, 설정(Configuratoin). 세번째는, 실행(Execution)이다.

settings.gradle을 찾고Settings 인스턴스를 만든다.Project인스턴스를 생성한다task마다 task graph를 생성한다 task를 실행한다.https://docs.gradle.org/current/userguide/build_lifecycle.html
- https://docs.gradle.org/current/userguide/img/build-lifecycle-example.png