초보자를 위한 Gradle 안내서 3편: Task
커리큘럼
- Build툴?, Gradle은 무엇인가?
- Gradle 아키텍쳐
- Task
- 각자의 프로젝트로
이어서..
전편에서 gradle의 아키텍쳐와 철학 그리고 Lifecycle(생명주기) 에 대해서 다뤘다.
이번 편에서는 Task에 대해서 자세하게 다뤄보려고 한다.
Task?
앞에서 task는 Gradle의 실행단위
라고 하였는데
실행단위
를 어떤 작업을 하는 약속된 하나의 객체라고 생각하면 된다.
Gradle의 초기화 > 구성 > 실행 3단계에서
실행 단계에서 실질적으로 우리가 원하는 기능을 하는 것은 task
다.
(사실 모든건 task
를 실행하기 위한 준비일 뿐이였다..)
처음에 Console에서 gradle init
명령을 통해 프로젝트를 생성 했었을 것이다.
init
도 사실 하나의 Task
이다.
Console에 gradle [task]
명령을 통해 원하는 task를 실행할 수 있다.
기본 제공하는 task 몇 개 더 소개드리겠다. (해보세용~)
- gradle tasks : 내장 task 리스트를 보여준다.
- gradle help –task (task명) : task명으로 작성한 task의 도움말 보여준다.
- gradle build : 빌드한다.
- gradle clean : 빌드 디렉토리를 삭제한다
예제 다시보기
아래의 예제를 이전글에서 봤을 것이다. 예제를 보면 우리가 직접 Task를 정의 할 수 있다는 걸 알 수 있다.
// build.gradle file
println "Hello"
task testTask {
println "testTask running"
doLast {
println "Task do Last"
}
doFirst {
println "Task do First"
}
}
println "finish Configure"
..\project> gradle testTask
> Configure project :
Hello
testTask running
finish Configure
> Task :testTask
Task do First
Task do Last
BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
testTask running
은 구성단계에 출력되고
Task do Last
와 Task do First
는 실행 단계에서 실행이 되었다.
이유를 알아보자면 Gradle의 생명주기 에 있다.
Task의 생성
task
는 build.gradle
에 정의되고 구성단계에서 TaskContainer
를 이용해 빈으로 생성된다고 했었다.
구성단계에서 testTask running
가 출력이 되는 이유는
구성단계에서 testTask
를 읽어 Bean 생성때 실행하기 때문이다.
Task의 동작
구성 단계에서 이미 Task를 실행하는데 그럼 실행 단계에서는 뭘하는 것일까? 실행 단계에서 Task의 동작 방식은 일련의 Action 을 순서대로 실행해줄 뿐이다. 즉, Task는 일련의 Action객체로 구성되어 있다고 봐도 된다.
Task 공식문서에 가면 더 다양한 Action을 볼 수 있다.
Task 그래프
어떤 작업을 할때 이 작업을 하기위해서 선행되야 하는 작업이 있을 수 있다
Java에서 컴파일후에 Class 파일을 Target폴더로 옮겨준다던지 등등
Task는 다른 Task에 종속이 될 수 있다 그리고 Task들간에 관계는 DAG(Directed acyclic graph) 로 작동한다
Task 종속 테스크 지정
// build.gradle
task taskX {
dependsOn 'taskY'
doFirst {
println 'taskX doFirst'
}
doLast {
println 'taskX doLast'
}
}
task taskY {
doLast {
println 'taskY'
}
}
// 출력
> gradle taskX //명령!
> Task :taskY
taskY
> Task :taskX
taskX doFirst
taskX doLast
참고
- Task에 관한 공식문서
- Task에 관한 프로그램 개발 지식 공유 블로그