我有一个build.gradle,代码如下:
task someDir(type: Exec) {
outputs.files "someDir"
mkdir "someDir"
}
jar {
dependsOn "someDir"
// needs to put someFile in someDir
...
}
clean << {
project.delete "someDir"
}
当我运行gradle jar
时,它是有效的。当我运行gradle clean jar
时,它失败了,因为someDir
不存在。看起来gradle只是在最初检查someDir
是否存在,而不是在运行真正依赖它的目标之前。为什么?我怎么还能和其他目标一起逃跑?我喜欢在做出改变之前重建一切。
此构建脚本的问题在于someDir
目录是在配置阶段创建的,而不是在someDir
任务运行时创建的。要解决此问题,请使用doFirst { ... }
或doLast { ... }
包装mkdir "someDir"
。也不清楚为什么someDir
具有Exec
类型。也许你没有展示它的其余配置?