2013-07-03 62 views
11

用Gradle构建我的最终输出文件后,我想做2件事。更新本地version.properties文件并将最终输出最终复制到某个特定目录进行归档。假设我已经实现了2种方法,它们完全符合我刚刚描述的方法,即updateVersionProperties()archiveOutputFile()更好地使用Gradle中的任务依赖关系或task.doLast?

我知道知道什么是应该做最好的办法......

备选方案A:

assembleRelease.doLast { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

备选方案B:

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

在这里,我会打电话myBuildTask而不是assembleRelease如替代方案A中的那样。

哪一个是推荐的方法,为什么?相对于另一个有什么优势吗?请稍后澄清... :)

回答

13

只要您可以,将新活动建模为单独的任务。 (在你的情况,你可以添加更多的任务。)这样做有很多好处:

  • 更好的反馈哪个活动正在执行或未能
  • 能力申报任务的输入和输出(收获所有是来自这个)
  • 能够复用现有的任务类型
  • 更多可能性摇篮并行
  • 执行任务等等
好处

有时候很难将活动建模为一项单独的任务。 (一个例子是当需要后处理现有任务的输出时,在一个单独的任务中执行此操作会导致在后续运行中原始任务永远不会是up-to-date)。只有这样,才能将活动附加到现有的任务与doLast

+1

你如何建议创建这些任务的依赖关系?我想要一个单独的任务来组装整个项目(基本上是“替换”assembleRelease),并且这两个任务必须在成功**执行'assembleRelease'后执行**。在他们之间,这个命令并没有真正的相关性。 –

+6

'myBuildTask.dependsOn(updateVersionProperties,archiveOutputFile); updateVersionProperties.dependsOn(assembleRelease); archiveOutputFile.dependsOn(assembleRelease)' –