abstract class ProducerTask @Inject constructor( layout: ProjectLayout ) : DefaultTask() { @OutputFile val outputFile = layout.buildDirectory.file("output.txt") @TaskAction fun doWork() { val outputFile = outputFile.get().asFile outputFile.writeText("zak") } } abstract class ConsumerTask : DefaultTask() { @get:Input abstract val input: Property @TaskAction fun doWork() { val input = input.get() logger.lifecycle("Hello from $input") } } val producerTask = tasks.register("producerTask") val consumerTask = tasks.register("consumerTask") { this.input = producerTask.map { it.outputFile.get().asFile.readText() } }