Gradle 작업의 UP-TO-DATE 속성을 재설정 하시겠습니까?


106

gradle 작업을 다시 실행하거나 모든 작업을 다시 최신 상태가 아닌 상태로 재설정 할 수있는 방법이 있습니까?

답변:


133

-C rebuildGradle의 캐시를 다시 빌드 하여 빌드를 실행하십시오 .

최신 버전의 Gradle에서는 --rerun-tasks


89

단일 작업 만 항상 실행 outputs하려면 작업 내부에 속성을 설정할 수 있습니다 .

outputs.upToDateWhen { false }

작업에 정의 된 파일 입력이없는 경우 Gradle은 위 코드를 사용하는 경우에도 작업을 건너 뛸 수 있습니다. 예를 들어, 압축 또는 복사 태스크에는 태스크 정의 의 구성 단계 에서 제공되는 파일이 하나 이상 있어야 합니다.


14
이것은 나를 위해 아무것도하지 않습니다. 나는 그것을 작업에 추가했고 "최신"을 얻었습니다. 재미있는 점은 ZipTask이고 대상 아카이브를 삭제했다는 것입니다.
maaartinus 2014 년

5
:이 같은 사용을 위해 믿을 수 없다tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
마틴 L.

작업이 실행되지 않는 경우에 대한 답변이 업데이트되었습니다.
cmcginty

요즘 gradle 빌드 캐시가 활성화되면 작업이 다시 실행되지는 않지만 출력은 캐시에서 복원됩니다.
Stephen Friedrich

25

당신이 사용할 수있는 cleanTaskname

당신이 가지고 있다고 가정합시다

:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE

강제로 sometask2를 다시 실행하도록하겠습니다.

someproject:cleanSometask2

모든 것을 실행하는 작업을 실행하기 전에.

분명히 gradle에서 UP-TO-DATE를 이해하는 모든 작업은 자체 청소 방법도 이해합니다.


1
'gradle clean'은 현재있는 프로젝트의 모든 것을 정리합니다. 기본적으로 기본적으로 '/ build'인 기본 출력 폴더를 삭제합니다. 이것이 당신이 찾던 것입니까?
c_maker 2011-09-03

6
아니요. 지정된 작업에 대한 출력 파일이없는 것으로 최신 상태로 캡처 된 경우 최신 상태로 다시 설정되지 않습니다. 즉, 빌드 중단의 일부가 있었지만 전체적으로 성공하면 캡처 된 상태가 잘못된 것이므로이를 지워야합니다.
Stefan Kendall 2011 년

1
일반적으로 $ buildDir의 모든 항목을 삭제하는 'clean'작업은 기본 플러그인에 의해 도입 된 빌드 스크립트에서 사용할 수 있습니다.
Rene Groeschke 2012-06-20

5

작업이 계속 설정되어 있기 때문에 outputs.upToDateWhen { false }작업 내부 에 설정 하거나 플래그를 추가 --rerun-tasks해도 도움이되지 않는 어려운 경우가있었습니다.setOnlyIffalse 실행할 때마다 가있었습니다.

다음을 추가하여 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 }
    }
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.