【问题标题】:Tracking (and deleting) output files from a Gradle task从 Gradle 任务中跟踪(和删除)输出文件
【发布时间】:2015-10-27 00:44:58
【问题描述】:

使用 Google protobuf-gradle-plugin,它可能会根据大量 proto 文件输入生成多个文件。运行任务时,只能看到所有已输出的文件,而不是先验地确定输出的内容。

到了清理项目的时候,挑战就来了。 Gradle 似乎将跟踪输出文件,可从AbstractTask.getOutputs().getPreviousFiles() 访问。那是 Gradle 内部的,所以我怀疑你可以依赖它。如果您想删除所有输出文件,最好的方法是什么?

  1. 一种可能性是将输出文件夹限制在构建目录中,这样如果将其删除,所有生成的文件都将消失。

  2. 另一个是在输出目录中创建一个清单,它将跟踪所有创建的文件,然后它就会知道要删除什么。

这里有什么建议?

【问题讨论】:

    标签: gradle gradle-plugin


    【解决方案1】:

    依赖于内部 API 不是一个好主意。它不是偶然内部的,但可能会在没有任何通知的情况下进行更改,因此会破坏构建。

    将输出重定向到project.buildDir 更不容易出错且更易于实现。在这种情况下,一切都很简单,这个文件夹将在 clean 调用时被删除,文件将被删除。

    在创建清单时,我发现它更难实现和维护,而且更容易出错 - 你需要很好地了解 gradle 机制(这可能不像看起来那么难)才能在正确的路。我也找不到此解决方案的任何优点。你有吗?

    所以,总结一下,更改输出文件夹。

    【讨论】:

    • 输出被删除的情况如何处理?对于 IncrementalTask​​Inputs,您可能能够计算出差异。否则,您将需要始终删除整个输出目录,然后重新填充整个目录。有没有可能做得更好?
    • @brunobowden 如果我理解它很好 gradle 照顾它是默认的。如果您注释任务输出,gradle 将在丢失时始终准备它们。
    • 你是正确的@opal。我解释得不够好。我正在考虑 ATinput 更改何时导致 AToutput 更改。由于 protobuf 插件的限制,它不知道何时对 ATinput 进行编辑可能会导致 AToutput 消失。在这种情况下,它必须清除所有输出,然后重新创建所有内容。
    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 2020-11-18
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多