/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 , ĠTeam Dev . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand / or Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice Ġand Ġthe Ġfollowing Ċ Ġ* Ġdisclaimer . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ċ Ġ* Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR Ċ Ġ* ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT Ċ Ġ* ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , Ċ Ġ* ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , Ċ Ġ* ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY Ċ Ġ* ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ċ Ġ* Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE Ċ Ġ* ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġio . sp ine . internal . gradle Ċ Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . Gradle Exception Ċ import Ġorg . gradle . api . tasks . Internal Ċ import Ġorg . gradle . api . tasks . Task Action Ċ import Ġorg . gradle . internal . os . Operating System Ċ Ċ /** Ċ Ġ* ĠA ĠGradle Ġtask Ġwhich Ġruns Ġanother ĠGradle Ġbuild . Ċ Ġ* Ċ Ġ* ĠLa unches ĠGradle Ġwrapper Ġunder Ġa Ġgiven Ġ[ directory ] Ġwith Ġthe Ġspecified Ġ[ task Names ] Ġnames . Ċ Ġ* ĠThe Ġ` clean ` Ġtask Ġis Ġalso Ġrun Ġif Ġcurrent Ġbuild Ġincludes Ġa Ġ` clean ` Ġtask . Ċ Ġ* Ċ Ġ* ĠThe Ġbuild Ġwrites Ġverbose Ġlog Ġinto Ġ`$ directory / build / debug - out . txt `. Ċ Ġ* ĠThe Ġerror Ġoutput Ġis Ġwritten Ġinto Ġ`$ directory / build / error - out . txt `. Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ open Ġclass ĠRun Gradle Ġ: ĠDefault Task () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPath Ġto Ġthe Ġdirectory Ġwhich Ġcontains Ġa ĠGradle Ġwrapper Ġscript . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġlateinit Ġvar Ġdirectory : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġnames Ġof Ġthe Ġtasks Ġto Ġbe Ġpassed Ġto Ġthe ĠGradle ĠWrapper Ġscript . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtask Names : ĠList < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFor Ġhow Ġmany Ġminutes Ġto Ġwait Ġfor Ġthe ĠGradle Ġbuild Ġto Ġcomplete . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġvar Ġmax Duration M ins : ĠLong Ġ= Ġ 1 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNames Ġof ĠGradle Ġproperties Ġto Ġcopy Ġinto Ġthe Ġlaunched Ġbuild . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġproperties Ġare Ġlooked Ġup Ġin Ġthe Ġroot Ġproject . ĠIf Ġa Ġproperty Ġis Ġnot Ġfound , Ġit Ġis Ġignored . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġ[ Gradle Ġdoc ]( https :// docs . gradle . org / current / user guide / build _ environment . html # sec : gradle _ configuration _ properties ) ĊĠĠĠĠ Ġ* Ġfor Ġmore Ġinfo Ġabout ĠGradle Ġproperties . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġvar Ġinclude Gradle Properties : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpecifies Ġtask Ġnames Ġto Ġbe Ġpassed Ġto Ġthe ĠGradle ĠWrapper Ġscript . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtask ( var arg Ġtasks : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtask Names Ġ= Ġtasks . asList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġmaximum Ġtime Ġto Ġwait Ġuntil Ġthe Ġbuild Ġcompletion Ġin Ġminutes ĊĠĠĠĠ Ġ* Ġand Ġspecifies Ġtask Ġnames Ġto Ġbe Ġpassed Ġto Ġthe ĠGradle ĠWrapper Ġscript . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtask ( max Duration M ins : ĠLong , Ġvar arg Ġtasks : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtask Names Ġ= Ġtasks . asList () ĊĠĠĠĠĠĠĠ Ġthis . max Duration M ins Ġ= Ġmax Duration M ins ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġprivate Ġfun Ġexecute () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġbuild Ġerror Ġoutput Ġlog . ĊĠĠĠĠĠĠĠ Ġ// ĠSince Ġwe 're Ġexecuting Ġthis Ġtask Ġin Ġanother Ġprocess , Ġwe Ġredirect Ġerror Ġoutput Ġto ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġfile Ġunder Ġthe Ġ` build ` Ġdirectory . ĊĠĠĠĠĠĠĠ Ġval Ġbuild Dir Ġ= ĠFile ( directory , Ġ" build ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! build Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Dir . mkdir () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġerror Out Ġ= ĠFile ( build Dir , Ġ" error - out . txt ") ĊĠĠĠĠĠĠĠ Ġval Ġdebug Out Ġ= ĠFile ( build Dir , Ġ" debug - out . txt ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġbuild Command () ĊĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= Ġstart Process ( command , Ġerror Out , Ġdebug Out ) ĊĊĠĠĠĠĠĠĠ Ġ/* Ġ ĠThe Ġtimeout Ġis Ġset Ġbecause Ġof ĠGradle Ġprocess Ġexecution Ġunder ĠWindows . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSee Ġthe Ġfollowing Ġlocations Ġfor Ġdetails : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttps :// github . com / gradle / gradle / pull / 8 4 6 7 # issuecomment - 4 9 8 3 7 4 2 8 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttps :// github . com / gradle / gradle / issues / 3 9 8 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttps :// dis cuss . gradle . org / t / we ird ness - in - gradle - exec - on - windows / 1 3 6 6 0 / 6 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcompleted Ġ= Ġprocess . waitFor ( max Duration M ins , ĠTimeUnit . MIN UTES ) ĊĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= Ġprocess . exit Value () ĊĠĠĠĠĠĠĠ Ġif Ġ(! completed Ġ|| Ġexit Code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Out Exists Ġ= Ġerror Out . exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Out Exists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( error Out . read Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGradle Exception (" Child Ġbuild Ġprocess ĠFAILED ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠExit Ġcode : Ġ$ exit Code ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Out Exists ) Ġ" ĠSee Ġ$ error Out Ġfor Ġdetails ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" Ġ$ error Out Ġfile Ġwas Ġnot Ġcreated ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Command (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscript Ġ= Ġbuild Script () ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġcommand . add ("${ project . rootDir }/ $ script ") ĊĠĠĠĠĠĠĠ Ġval Ġshould Clean Ġ= Ġproject . gradle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. task Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Task (": clean ") ĊĠĠĠĠĠĠĠ Ġif Ġ( should Clean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . add (" clean ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommand . addAll ( task Names ) ĊĠĠĠĠĠĠĠ Ġcommand . add ("-- console = plain ") ĊĠĠĠĠĠĠĠ Ġcommand . add ("-- debug ") ĊĠĠĠĠĠĠĠ Ġcommand . add ("-- stack trace ") ĊĠĠĠĠĠĠĠ Ġcommand . add ("-- no - daemon ") ĊĠĠĠĠĠĠĠ Ġadd Properties ( command ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcommand ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Properties ( command : ĠMutable List < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Project Ġ= Ġproject . root Project ĊĠĠĠĠĠĠĠ Ġinclude Gradle Properties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġroot Project . has Property ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġname Ġ-> Ġname Ġto Ġroot Project . property ( name ). toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( name , Ġvalue ) Ġ-> Ġcommand . add ("- P $ name =$ value ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Script (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġruns On Windows Ġ= ĠOperating System . current (). is Windows () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( runs On Windows ) Ġ" gradle w . bat " Ġelse Ġ" gradle w " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Process ( command : ĠList < String >, Ġerror Out : ĠFile , Ġdebug Out : ĠFile ) Ġ= ĊĠĠĠĠĠĠĠ ĠProcess Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. command ( command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. directory ( project . file ( directory )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. redirect Error ( error Out ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. redirect Output ( debug Out ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () Ċ } Ċ