Gradle에서 커스텀 태스크를 만드는 방법은 무엇인가요?
_____A1: 커스텀 태스크는 Gradle 빌드 스크립트 내에서 기본 제공되는 태스크 외에 사용자가 직접 정의하는 태스크입니다. 프로젝트 빌드 과정 중 특정 작업을 수행하도록 맞춤 설정할 수 있습니다.
Q2: 커스텀 태스크를 만드는 기본 방법은 무엇인가요?
A2: Gradle 빌드 스크립트(build.gradle) 안에서 `task` 키워드를 사용해 새로운 태스크를 선언할 수 있습니다. 예를 들어:
```groovy
task myCustomTask {
doLast {
println 'Hello from custom task!'
}
}
```
이렇게 하면 `myCustomTask`라는 태스크가 만들어지고, 실행 시 메시지를 출력합니다.
Q3: 커스텀 태스크 내에서 작업은 어떻게 정의하나요?
A3: 태스크의 동작은 `doFirst {}`(태스크 실행 전에 실행) 또는 `doLast {}`(태스크 실행 후에 실행) 클로저 안에 정의합니다. 일반적으로 `doLast` 안에 실행할 코드를 작성합니다.
Q4: 커스텀 태스크를 클래스형태로 만드는 방법은 무엇인가요?
A4: Gradle에서는 Groovy, Kotlin DSL 모두 태스크 클래스를 생성해 타입 안전한 태스크를 정의할 수 있습니다. 예를 들어 Groovy DSL에서는:
```groovy
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class GreetingTask extends DefaultTask {
String message = 'Hello, Gradle!'
@TaskAction
def greet() {
println message
}
}
task greet(type: GreetingTask) {
message = 'Welcome to custom task!'
}
```
Q5: 커스텀 태스크 클래스에서 입력(Property)과 출력을 지정할 수 있나요?
A5: 네, Gradle 태스크 클래스에서는 `@Input`, `@OutputFile` 등의 어노테이션을 사용해 입력 및 출력 속성을 지정해 캐시와 증분 빌드 등을 지원할 수 있습니다. 예:
```groovy
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputFile
class ReportTask extends DefaultTask {
@Input
String reportName
@OutputFile
File outputFile = project.file("${project.buildDir}/reports/report.txt")
@TaskAction
void generate() {
outputFile.text = "Report: ${reportName}"
}
}
task generateReport(type: ReportTask) {
reportName = 'Monthly Report'
}
```
Q6: Kotlin DSL을 사용할 때 커스텀 태스크를 만드는 방법은?
A6: Kotlin DSL에서는 다음과 같이 클래스를 정의하고 `tasks.register`로 등록합니다.
```kotlin
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
open class GreetingTask : DefaultTask() {
var message: String = "Hello, Gradle!"
@TaskAction
fun greet() {
println(message)
}
}
tasks.register
message = "Welcome to Kotlin DSL custom task!"
}
```
Q7: 커스텀 태스크를 빌드스크립트 외부 파일로 분리할 수 있나요?
A7: 네, 외부 Groovy 또는 Kotlin 파일로 태스크 클래스를 정의하고, `build.gradle` 또는 `build.gradle.kts`에서 import 또는 apply plugin 방식으로 사용할 수 있습니다. 또한 Gradle 플러그인을 만들어 재사용 가능하게 만들기도 합니다.
Q8: 커스텀 태스크를 다른 태스크에 의존하게 설정하려면 어떻게 하나요?
A8: `dependsOn` 키워드를 사용해 태스크 간 의존성을 지정합니다. 예:
```groovy
task taskA {
doLast { println 'Task A' }
}
task taskB {
dependsOn taskA
doLast { println 'Task B' }
}
```
Q9: 커스텀 태스크 실행 방법은?
A9: 터미널에서 `./gradlew myCustomTask` 명령어로 실행합니다. 위에서 정의한 태스크 이름을 지정하면 해당 태스크가 실행됩니다.
Q10: 커스텀 태스크를 통해 외부 명령어나 스크립트를 실행할 수도 있나요?
A10: 가능합니다. `exec {}` 블록을 사용하여 외부 프로세스를 실행할 수 있습니다. 예:
```groovy
task runShellScript {
doLast {
exec {
commandLine 'sh', './script.sh'
}
}
}
```
작성자:
정예원 [비회원]
| 작성일자: 1년 전
2025-01-01 07:51:25
조회수: 236 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 236 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.