답변:
단일 작업 만 항상 실행 outputs
하려면 작업 내부에 속성을 설정할 수 있습니다 .
outputs.upToDateWhen { false }
작업에 정의 된 파일 입력이없는 경우 Gradle은 위 코드를 사용하는 경우에도 작업을 건너 뛸 수 있습니다. 예를 들어, 압축 또는 복사 태스크에는 태스크 정의 의 구성 단계 에서 제공되는 파일이 하나 이상 있어야 합니다.
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
당신이 사용할 수있는 cleanTaskname
당신이 가지고 있다고 가정합시다
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
강제로 sometask2를 다시 실행하도록하겠습니다.
someproject:cleanSometask2
모든 것을 실행하는 작업을 실행하기 전에.
분명히 gradle에서 UP-TO-DATE를 이해하는 모든 작업은 자체 청소 방법도 이해합니다.
작업이 계속 설정되어 있기 때문에 outputs.upToDateWhen { false }
작업 내부 에 설정 하거나 플래그를 추가 --rerun-tasks
해도 도움이되지 않는 어려운 경우가있었습니다.setOnlyIf
false
실행할 때마다 가있었습니다.
다음을 추가하여 build.gradle
강제 실행 myTask
:
gradle.taskGraph.whenReady { taskGraph ->
def tasks = taskGraph.getAllTasks()
tasks.each {
def taskName = it.getName()
if(taskName == 'myTask') {
println("Found $taskName")
it.setOnlyIf { true }
it.outputs.upToDateWhen { false }
}
}
}