最好在Gradle中使用task dependencies或task.doLast?

最好在Gradle中使用task dependencies或task.doLast?,gradle,build.gradle,Gradle,Build.gradle,使用Gradle构建最终输出文件后,我想做两件事。更新本地version.properties文件,并将最终输出final复制到某个特定目录以进行存档。假设我已经实现了两个方法,它们与我刚才描述的完全相同,updateVersionProperties()和archiveOutputFile() 我想知道做这件事最好的方法是什么 备选案文A: assembleRelease.doLast { updateVersionProperties() archiveOutputFile(

使用Gradle构建最终输出文件后,我想做两件事。更新本地version.properties文件,并将最终输出final复制到某个特定目录以进行存档。假设我已经实现了两个方法,它们与我刚才描述的完全相同,
updateVersionProperties()
archiveOutputFile()

我想知道做这件事最好的方法是什么

备选案文A:

assembleRelease.doLast {
    updateVersionProperties()
    archiveOutputFile()
}
备选案文B:

task myBuildTask(dependsOn: assembleRelease) << {
    updateVersionProperties()
    archiveOutputFile()
}

task myBuildTask(dependsOn:assembleerelease)只要有可能,就将新活动建模为单独的任务。(在您的情况下,您可以再添加两个任务。)这有许多优点:

  • 更好地反馈当前正在执行或失败的活动
  • 能够声明任务输入和输出(从中获得所有好处)
  • 重用现有任务类型的能力
  • Gradle并行执行任务的更多可能性
  • 等等

有时,将活动建模为单独的任务并不容易。(一个例子是,当需要对现有任务的输出进行后期处理时。在单独的任务中执行此操作将导致原始任务在后续运行中永远不会是最新的。)只有这样,活动才能通过
doLast

附加到现有任务。您建议如何创建这些任务依赖关系?我想用一个任务来组装整个项目(基本上是“替换”
assembleerelease
),这两个任务必须在成功执行
assembleerelease
后才能执行。它们之间的顺序实际上并不相关。
myBuildTask.dependsOn(updateVersionProperties,archiveOutputFile);updateVersionProperties.dependsOn(assembleRelease);archiveOutputFile.dependsOn(assembleRelease)