Gradle Goodness: Add Incremental Build Support to Custom Tasks with Annotations
In a previous post we learned how we can use the inputs and outputs properties to set properties or files that need to be checked to see if a task is up to date. In this post we learn how a custom task class can use annotations to set input properties, file or files and output files or dir.
For input we can use @Input, @InputFile, @InputFiles or @InputDirectory annotations. Gradle uses the properties with annotations for checking if a task is up to date. Output file or directory can be marked with @OutputFile and @OutputDirectory.
00.task generateVersionFile(type: Generate) {01.version = '2.0'02.outputFile = file("$project.buildDir/version.txt")03.}04. 05.task showContents << {06.println generateVersionFile.outputFile.text07.}08.showContents.dependsOn generateVersionFile09. 10.class Generate extends DefaultTask {11.@Input12.String version13. 14.@OutputFile15.File outputFile16. 17.@TaskAction18.void generate() {19.def file = getOutputFile()20.if (!file.isFile()) {21.file.parentFile.mkdirs()22.file.createNewFile()23.}24.file.write "Version: ${getVersion()}"25.}26.}We can run our task and get the following output:
$ gradle showContents:generateVersionFile:showContentsVersion: 2.0BUILD SUCCESSFULAnd if we run it again we see the task is now up to date:
$ gradle showContents:generateVersionFile UP-TO-DATE:showContentsVersion: 2.0BUILD SUCCESSFULWe can change the version numer in our build script to 2.1 and see the output:
$ gradle showContents:generateVersionFile:showContentsVersion: 2.1BUILD SUCCESSFUL
浙公网安备 33010602011771号