How can a clean task define no outputs?

I have the following defined for configuring the ‘clean’ task:

clean {
 ext.deployDir = 'foo/bar'
 ext.inputFiles = fileTree(dir: deployDir, include: 'rest-example-*.war')
 inputs.files inputFiles
    doLast {
  delete inputFiles

My task runs every time when I execute “gradle clean” and in the debug output I see

14:34:58.908 [INFO] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Executing task ‘:rest-example:clean’ (up-to-date check took 0.0 secs) due to:

Task has not declared any outputs. 14:34:58.908 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ‘:rest-example:clean’.

So, the 2 issues I see are 1.) it never executes the delete since the wars are still there and 2.) how do you specify outputs for a case like this.

BTW, I didn’t use “outputs.dir deployDir” in the clean task becasue other tasks will be adding and cleaning their content from the deplyDir.

Unless you specify at least one output, Gradle will assume that outputs are out-of-date. You’d probably have to use ‘outputs.upToDateWhen { … }’ and interpret the absence of the files/dirs to be deleted as an up-to-date output. Anyway, I don’t think there is any benefit in declaring inputs and outputs for the ‘clean’ task.

Well I suppose seeing the ":clean Up-To-Date " is the same as seeing the green bar in junit, it just feels good. Nonetheless, using upToDateWhen { … } has worked. Thanks.