Task up-to-date but OutputFile not created

(Martin d'Anjou) #1

Here is a task that declares one input file and one output file. I expect Gradle to execute the task action as long as the output file does not exist, but Gradle says the task is up-to-date, without checking whether the output file exists or not.

class MyProcess extends DefaultTask {
    File inputFile

    File outputFile

    void perform() {
        // Oops, the user forgot to effectively create the output file

task perform(type: MyProcess) {
    inputFile file('build.gradle')
    outputFile file("${buildDir}/file1.bin")

First run:

$ gradle perform

Do it again, the output file does not exist:

$ gradle perform
:perform UP-TO-DATE

What do I need to do to the MyProcess class to get Gradle to run the task action when the output file doesn’t exist?

(Lance Java) #2

You could use TaskOutputs.upToDateWhen(Closure c)


class MyProcess extends DefaultTask {
   MyProcess() {
      outputs.upToDateWhen {
   // etc