목차

Gradle Task

선언

task hello << {
    println "hello"
}
 
// 괄호하고 이름
task(hello) << {
    println "hello"
}
 
task(copy, type: Copy) {
    from(file('srcDir'))
    into(buildDir)
}
 
// 이름을 문자열로
task('hello') <<
{
    println "hello"
}
 
// tasks 에 추가
tasks.add(name: 'taskName', type: org.something.GradleTask, dependsOn: 'anotherTask') {
    // task 설정
    println "hello"
}
 
// with create
 
tasks.create(name: 'taskName', type: org.something.GradleTask, dependsOn: 'anotherTask') {
   // task 설정
}

태스크 정보 설정

task에 접근하기

task 설정

태스크 건너 뛰기

이미 최신으로 갱신된 태스크 건너뛰기

멀티 프로젝트에서 각 프로젝트 별 최신 갱신 여부 검사

inputs/outputs를 사용하여 VCS에서 받은 멀티 프로젝트의 프로젝트별 갱신 여부를 검사할 수 있다.

task checkUpToDate {
    description = '프로젝트 최신 갱신 여부 검사'
 
    def checkFile = file(new File(tmpDir, "gradle_${project.name}_check_up_to_date").absoluteFile)
 
    FileTree projectFileTree = fileTree(dir: project.projectDir)
    projectFileTree.exclude "${builDir}/**/*"
 
    inputs.files projectFileTree
    outputs.file checkFile
 
    doLast {
        println "[${project.name}] needs refresh."
        if (checkFile.exists()) {
            checkFile.delete()
        }
 
        checkFile.createNewFile()
    }
}

Task Rules

태스크의 실행 순서

tasks

UP-TO-Date upToDate 조건

--rerun-tasks

Task 실행에서 제외

gradle.taskGraph.whenReady { taskGraph ->
  def tasks = taskGraph.allTasks
 
  // 태스크 실행 그래프에 'aaa'가 들어있으면
  if (tasks.find { it.name.toLowerCase() == 'aaa'}) {
    bbb.enabled = false // bbb 태스크를 skip 한다. 로그상에 SKIP으로 뜸
  }
}

참조