我有一个创建目录的简单gradle任务
task foo(type: Exec) {
inputs.dir 'foo'
outputs.dir 'foo'
commandLine 'mkdir', 'foo'
}
问题是每次我运行任务foo
时,它总是运行。我希望它第一次运行,然后意识到该目录存在,就不会再次运行。我想念什么?
此外,如果foo
目录不存在,第一次出现这种情况怎么办?
答案 0 :(得分:0)
TaskInputs.dir()
方法的描述是:
在给定目录下找到的所有文件都被视为此任务的输入文件。
所以我想根本不检查目录是否存在,而仅检查目录中的文件是否更改。
但是,有一个简单的解决方法。只需在任务上使用onlyIf
闭包即可指定何时跳过它:
task foo(type: Exec) {
onlyIf { file('foo').exists() }
commandLine 'mkdir', 'foo'
}
在我的示例中,我仅使用了一个Exec
任务,以使其尽可能接近您的问题,但请注意,Gradle确实提供了一种方法mkdir()
,该方法比调用命令行更可取工具。请记住要在doFirst
或doLast
闭包内执行它,因为否则将在配置阶段内调用它。
还请注意,Gradle会自行创建所有必要的目录(用于Copy
任务等),因此仅在极少数情况下才需要手动创建目录。
答案 1 :(得分:-1)
这是一个简单的解决方案。
在任务中使用常规脚本创建文件夹。
task foo {
def folder = new File("foo")
// If it doesn’t exist, create a directory.
if( !folder.exists() ) {
folder.mkdirs()
}
}