API文档: | InputChanges |
---|
提供对需要由增量工作操作处理的任何输入文件的访问。
增量工作操作是接受单个InputChanges
参数的操作。然后,工作操作可以查询自上次执行以来输入参数发生了什么更改,以仅处理更改。以下示例显示了一个反转每个输入文件中文本的任务。它演示了如何InputChanges
仅处理已更改的文件。
abstract class IncrementalReverseTask extends DefaultTask { @Incremental @InputDirectory abstract DirectoryProperty getInputDir() @OutputDirectory abstract DirectoryProperty getOutputDir() @TaskAction void execute(InputChanges inputChanges) { inputChanges.getFileChanges(inputDir).each { change -> if (change.fileType == FileType.DIRECTORY) return def targetFile = outputDir.file(change.normalizedPath).get().asFile if (change.changeType == ChangeType.REMOVED) { targetFile.delete() } else { targetFile.text = change.file.text.reverse() } } } }
如果 Gradle 无法确定哪些输入文件需要重新处理,则所有输入文件都将报告为ChangeType.ADDED
.当发生这种完全重建时,工作的输出文件将在执行工作操作之前被删除。发生这种情况的情况包括:
- 没有先前执行的可用历史记录。
- 自上次执行以来,非文件输入参数已更改。
- 自上次执行以来,一个或多个输出文件已更改。
财产 | 描述 |
incremental | 指示 Gradle 是否可以确定哪些输入文件与之前的执行相比已过期。当历史记录不可用(即之前从未执行过此工作),或者非文件输入属性或输出文件发生更改时,增量输入不可用。 |
方法 | 描述 |
getFileChanges(parameter) | 参数的更改。 |
getFileChanges(parameter) | 参数的更改。 |
指示 Gradle 是否可以确定哪些输入文件与之前的执行相比已过期。当历史记录不可用(即之前从未执行过此工作),或者非文件输入属性或输出文件发生更改时,增量输入不可用。
什么时候true
:
什么时候false
:
Iterable
<FileChange
>
getFileChanges
(FileCollection
范围)
Iterable
<FileChange
>参数的更改。
当InputChanges.isIncremental()
是false
时,参数的所有元素都返回为ChangeType.ADDED
。
只能查询
用 @Incremental
或 @
注释的输入文件属性的更改。SkipWhenEmpty
请注意,对于带有PathSensitivity.NONE
, 而不是ChangeType.MODIFIED
事件的输入,文件修改可以报告为一对ChangeType.ADDED
和ChangeType.REMOVED
事件。
Iterable
<FileChange
>
getFileChanges
(范围)Provider
<? extends FileSystemLocation
>
Iterable
<FileChange
>Provider
<? extends FileSystemLocation
>参数的更改。
当InputChanges.isIncremental()
是false
时,参数的所有元素都返回为ChangeType.ADDED
。
此方法允许查询类型属性RegularFileProperty
和DirectoryProperty
更改。这两种类型通常用于@InputFile
和@InputDirectory
属性。
只能查询
用 @Incremental
或 @
注释的输入文件属性的更改。SkipWhenEmpty
请注意,对于带有PathSensitivity.NONE
, 而不是ChangeType.MODIFIED
事件的输入,文件修改可以报告为一对ChangeType.ADDED
和ChangeType.REMOVED
事件。