Gradle에서 `beforeTask`와 `afterTask` 훅을 사용하는 방법은 무엇인가요?
_____`beforeTask` 훅은 Gradle 빌드 실행 중 특정 Task가 실행되기 전에 호출되는 콜백입니다. 이를 통해 Task 실행 전 필요한 설정이나 로깅을 수행할 수 있습니다.
---
Q2: `afterTask` 훅이란 무엇인가요?
`afterTask` 훅은 특정 Task가 실행된 후 호출되는 콜백입니다. Task 실행 결과를 확인하거나 후처리 작업을 수행할 때 유용합니다.
---
Q3: `beforeTask`와 `afterTask` 훅을 Gradle 스크립트에서 어떻게 설정하나요?
`gradle.taskGraph.beforeTask { task -> ... }` 와 `gradle.taskGraph.afterTask { task, state -> ... }` 형태로 설정할 수 있습니다. 예를 들어:
```groovy
gradle.taskGraph.beforeTask { Task task ->
println "Task ${task.path} is about to start."
}
gradle.taskGraph.afterTask { Task task, TaskState state ->
println "Task ${task.path} finished. Success: ${state.successful}"
}
```
---
Q4: `beforeTask`와 `afterTask` 훅을 언제 등록해야 하나요?
빌드 스크립트가 평가되는 시점, 보통 `build.gradle` 파일이나 초기화 스크립트에서 등록합니다. 이렇게 해야 Task 실행 전에 훅이 정상적으로 동작합니다.
---
Q5: `afterTask` 훅에서 Task의 성공 여부를 어떻게 알 수 있나요?
`afterTask` 훅의 두 번째 파라미터로 전달되는 `TaskState` 객체의 `successful` 프로퍼티를 사용합니다. 예:
```groovy
gradle.taskGraph.afterTask { Task task, TaskState state ->
if (state.successful) {
println "${task.path} 성공적으로 완료됨."
} else {
println "${task.path} 실패함."
}
}
```
---
Q6: `beforeTask`와 `afterTask` 훅에서 Task 이름만 가져오려면 어떻게 하나요?
`task.name` 또는 `task.path`를 사용하면 됩니다.
- `task.name` : Task 이름 (예: `compileJava`)
- `task.path` : 프로젝트 경로를 포함한 전체 Task 경로 (예: `:app:compileJava`)
---
Q7: Kotlin DSL에서 `beforeTask`와 `afterTask`는 어떻게 사용하나요?
Kotlin DSL (`build.gradle.kts`)에서는 `taskGraph.beforeTask`와 `taskGraph.afterTask`에 람다를 등록합니다.
```kotlin
gradle.taskGraph.beforeTask { task ->
println("Task ${task.path} is about to start.")
}
gradle.taskGraph.afterTask { task, state ->
println("Task ${task.path} finished. Success: ${state.isSuccessful}")
}
```
---
Q8: `beforeTask`, `afterTask` 훅에서 Task 실행 취소 혹은 중단을 할 수 있나요?
기본적으로는 훅 내에서 Task 실행 흐름을 중단하는 기능은 제공하지 않습니다. Task의 실행 조건을 제어하려면 다른 메커니즘(예: `onlyIf`), task 의존성 관리를 활용해야 합니다.
---
Q9: 여러 번 `beforeTask`나 `afterTask` 훅을 등록해도 되나요?
네, Gradle은 훅을 여러 개 등록할 수 있으며, 등록된 순서대로 호출됩니다.
---
요약:
- `beforeTask`: Task 실행 직전에 실행되는 훅
- `afterTask`: Task 실행 후 호출되며, 성공 여부 등 상태 확인 가능
- 등록 방법: `gradle.taskGraph.beforeTask {...}`, `gradle.taskGraph.afterTask {...}`
- Kotlin DSL에서도 거의 동일한 방식으로 사용
- 실행 흐름 제어는 훅에서 직접 불가능, Task 조건 제어 기능을 사용해야 함
위 방법들을 활용하면 Gradle 빌드 과정에서 유연하게 작업 전후 처리를 할 수 있습니다.
작성자:
박다은 [비회원]
| 작성일자: 1년 전
2025-01-01 07:51:41
조회수: 149 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 149 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.