在执行多个Gradle任务之前创建目录

时间:2018-10-06 20:49:17

标签: gradle

我有几个任务需要存在build的子目录。

实现此目标的最佳方法是什么?

到目前为止,我有这个:

afterEvaluate {
    mkdir "$buildDir/work"
}

这:

task prepareDirs {
    mkdir "$buildDir/test"
}

第二个之所以起作用,是因为它在配置阶段中运行,因此我不需要在所有需要它的任务上使用dependsOn。

  • 还有其他选择吗?
  • mkdir是正确的方法吗?
  • buildDir在什么时候创建?我可以延长这项任务吗?

编辑:我注意到,如果我在执行主要任务之前在命令行上链接了干净任务,那么这两个操作都会失败。

1 个答案:

答案 0 :(得分:1)

以下应该起作用。请注意,prepareDirs必须具有约束mustRunAfter clean,才能解决您在EDIT中提到的问题

// task responsible to create the tmp/work dir
task prepareDirs {
    mustRunAfter clean
    doLast {
        mkdir "$buildDir/work"
    }
}

// make all tasks depend on the prepareDirs task
// exept 'clean' and 'prepareDirs' (avoid circular dependency)
tasks.each {
    if (it != prepareDirs && it != clean) {
        it.dependsOn prepareDirs
    }
}

如果您没有很多需要build/work目录的任务,并且不想让所有任务都取决于您的prepareDirs任务,则可以这样做:

[myTask1, myTask2, myTask3].each {
    it.dependsOn prepareDirs
}