问题 最好在Gradle中使用任务依赖项或task.doLast吗?


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

我知道想知道最好的方法是什么......

备选方案A:

assembleRelease.doLast {
    updateVersionProperties()
    archiveOutputFile()
}

备选方案B:

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

在这里我会打电话 myBuildTask 代替 assembleRelease 如替代A.

推荐哪种方式,为什么?一个优于另一个有什么优势吗?请稍微澄清一下...... :)


5882
2017-07-03 01:08


起源



答案:


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

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

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


13
2017-07-03 06:40



您如何建议创建这些任务依赖项?我想组建整个项目的一个任务(基本上“替换” assembleRelease)这两项任务必须只执行 成功之后 执行 assembleRelease。在他们之间,订单并不真正相关。 - Ricardo Amaral
myBuildTask.dependsOn(updateVersionProperties, archiveOutputFile); updateVersionProperties.dependsOn(assembleRelease); archiveOutputFile.dependsOn(assembleRelease) - Peter Niederwieser


答案:


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

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

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


13
2017-07-03 06:40



您如何建议创建这些任务依赖项?我想组建整个项目的一个任务(基本上“替换” assembleRelease)这两项任务必须只执行 成功之后 执行 assembleRelease。在他们之间,订单并不真正相关。 - Ricardo Amaral
myBuildTask.dependsOn(updateVersionProperties, archiveOutputFile); updateVersionProperties.dependsOn(assembleRelease); archiveOutputFile.dependsOn(assembleRelease) - Peter Niederwieser