Описание метода TaskInputs.dir()
гласит:
Все файлы, найденные в данном каталоге, рассматриваются как входные файлы для этой задачи.
Таким образом, я предполагаю, существует ли каталог или нет, просто не проверяется, а только изменяются ли файлы внутри каталога.
Однако есть простой обходной путь. Просто используйте закрытие onlyIf
в задаче, чтобы указать, когда его пропускать:
task foo(type: Exec) {
onlyIf { file('foo').exists() }
commandLine 'mkdir', 'foo'
}
Я использовал задачу Exec
в своем примере только для того, чтобы держать ее как можно ближе к вашему вопросу, но учтите, что Gradle действительно предоставляет метод mkdir()
, который должен быть предпочтительнее вызова инструмент командной строки. Имейте в виду, чтобы выполнить его внутри замыкания doFirst
или doLast
, поскольку он будет вызываться во время фазы конфигурации в противном случае.
Также обратите внимание, что Gradle создаст все необходимые каталоги (для Copy
задач и т. Д.) Самостоятельно, поэтому в очень редких случаях требуется создавать каталоги вручную.