2015-10-27 105 views
1

使用Google protobuf-gradle插件,它可以根据多个原始文件输入生成潜在的多个文件。在运行任务时,只能查看所有已输出的文件,而不能事先确定输出的内容。从Gradle任务中跟踪(并删除)输出文件

当清理项目时,挑战就来了。看起来Gradle会跟踪输出文件,可从AbstractTask.getOutputs().getPreviousFiles()访问。这是Gradle的内部,所以我怀疑你可以依靠这个。如果你想删除所有的输出文件,最好的方法是什么?

  1. 一种可能性是限制输出文件夹到构建目录,以便如果它被删除,所有生成的文件将会消失。

  2. 另一种方法是在输出目录中创建一个清单,该清单将跟踪所有创建的文件,然后知道要删除的内容。

这里有什么建议?

回答

0

根据内部API不是一个好主意。这不是偶然的内部,但可以在没有任何通知的情况下进行更改,因此破坏了构建。

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

当谈到创建清单时,我发现实现和维护以及更容易出错的难度更大 - 您需要更好地了解gradle机制(可能并不像看起来那么困难)来实现它正确的方式。我也没有发现这个解决方案的任何优点。你有什么?

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

+0

如何处理输出被删除时的情况?对于IncrementalTask​​Inputs,您可能可以计算差异。否则,您需要始终删除整个输出目录,然后重新填充整个目录。有没有可能做得更好? – brunobowden

+0

@brunobowden如果我能很好地理解它,那么默认情况下它会被照顾。如果您注释任务输出,gradle会在失踪时始终准备它们。 – Opal

+0

你是正确的@opal。我没有解释得很好。我正在考虑ATinput变化导致AToutput变化的时间。由于protobuf插件的限制,它不知道何时编辑ATinput可能导致AToutput消失。在这种情况下,它必须清除所有输出,然后重新创建所有内容。 – brunobowden