如何使用taskGraph.whenReady闭包一个接一个地运行任务



我试图在渐变构建中的TAR文件中包含一个ZIP文件。我没有疯,这是为了复制现有的蚂蚁脚本,由于各种业务原因,我无法更改分发布局。

  • 我不得不使用whenReady闭包来毫无问题地收集依赖项
  • whenReady意味着在buildTar任务完成之后才构建ZIP文件,即使buildTar依赖于buildZip
  • 我不能直接调用tar{},因为gradle不支持此操作
  • Gradle似乎不支持直接调用任务

这是的总体布局

task buildZip(type: Zip) {
   gradle.taskGraph.whenReady {
      // build zip file usual way with from blocks
      from(...) {
      }
      from(...) {
      }
   }
   doLast {
      println "ZIP ready"
      // could I call tar task from here??
   }
}
task buildTar(type: Tar, dependsOn: buildZip) {
    println "Building TAR"
    from (buildZip.archivePath) {
    }
    ... more stuff, installer script etc.
}

我看到的输出是gradle:buildTar,即TAR在ZIP构建之前构建。

Building TAR
ZIP ready

更新。

Perryn Fowler在下面的评论正确地指出了这个问题,这是基于我对gradle中执行与配置的误解。

柏油不是在Zip之前建造的,柏油任务是在Zip任务执行之前配置

更新。

不再需要此问题,因为选项重复可以在ZIP任务中使用策略,以避免问题被grade.taskGraph.whenReady "修复"

这个问题的答案实际上是由Perryn Fowler在顶部评论中提供的,这是基于我对gradle中执行与配置的误解。我已经创建了这个答案,所以问题被标记为已回答。另一个答案只是用用户指南的链接改写了原来的问题。

柏油不是在Zip之前建造的,柏油任务是在Zip任务执行之前配置

即,运行特殊任务中的任何嵌套命令,例如Zip、Tar等,并在配置时稍后执行from块。

这里有一个示例工作解决方案:

build.gradle

task buildZip(type: Zip) {
    from 'dir'
    destinationDir project.file('build/zip')
    archiveName 'lol.zip'
}
task buildTar(type: Tar, dependsOn: buildZip) {
    from 'build/zip'
    include '*.zip'
    destinationDir project.file('build/tar')
    archiveName 'lol.tar'
}   

你清楚吗?

附言:我认为你阅读用户指南是个好主意。

相关内容

最新更新