apply < G reeting Plugin >() Ċ Ċ fun Ġbuild File ( path : ĠString ) Ġ= Ġlayout . build Directory . file ( path ) Ċ Ċ configure < G reeting Plugin Extension > Ġ{ ĊĊĠĠĠ Ġmessage . set (" Hi Ġfrom ĠGradle ") ĊĊĠĠĠ Ġoutput Files . from ( ĊĠĠĠĠĠĠĠ Ġbuild File (" a . txt "), ĊĠĠĠĠĠĠĠ Ġbuild File (" b . txt ")) Ċ } Ċ Ċ open Ġclass ĠG reeting Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ): ĠUnit Ġ= Ġproject . run Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġ' greeting ' Ġextension Ġobject ĊĠĠĠĠĠĠĠ Ġval Ġg reeting Ġ= Ġextensions . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" greeting ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG reeting Plugin Extension :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġtask Ġthat Ġuses Ġthe Ġconfiguration ĊĠĠĠĠĠĠĠ Ġtasks Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister (" hello ", ĠG reeting :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" G reeting " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . set ( greeting . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Files . set From ( greeting . output Files ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠG reeting Plugin Extension ( project : ĠProject ) Ġ{ ĊĊĠĠĠ Ġval Ġmessage Ġ= Ġproject . objects . property < String >() ĊĊĠĠĠ Ġval Ġoutput Files : ĠConfigur able File Collection Ġ= Ġproject . files () Ċ } Ċ Ċ open Ġclass ĠG reeting Ġ: ĠDefault Task () Ġ{ ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġval Ġmessage Ġ= Ġproject . objects . property < String >() ĊĊĠĠĠ Ġ@ get : Output Files ĊĠĠĠ Ġval Ġoutput Files : ĠConfigur able File Collection Ġ= Ġproject . files () ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġprint Message () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġmessage . get () ĊĠĠĠĠĠĠĠ Ġval Ġoutput Files Ġ= Ġoutput Files . files ĊĠĠĠĠĠĠĠ Ġlogger . info (" Writing Ġmessage Ġ'$ message ' Ġto Ġfiles Ġ$ output Files ") ĊĠĠĠĠĠĠĠ Ġoutput Files . forEach Ġ{ Ġit . write Text ( message ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ