package Ġcom . gradle up . gr 8 Ċ Ċ import Ġcom . gradle up . gr 8 . Strip Gradle Api Task . Companion . is Gradle Api Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . Task Ċ import Ġorg . gradle . api . file . Regular File Ċ import Ġorg . gradle . api . provider . List Property Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . api . provider . Provider Ċ import Ġorg . gradle . api . tasks . Task Provider Ċ import Ġorg . gradle . api . tasks . bund ling . Abstract Archive Task Ċ import Ġorg . gradle . api . tasks . bund ling . Jar Ċ import Ġjava . io . File Ċ Ċ open Ġclass ĠGr 8 Configurator ( ĊĠĠĠ Ġprivate Ġval Ġname : ĠString , ĊĠĠĠ Ġprivate Ġval Ġproject : ĠProject , Ċ ) Ġ{ ĊĠ Ġprivate Ġvar Ġprogram Jar : ĠProperty < Any > Ġ= Ġproject . objects . property ( Any :: class . java ) ĊĠ Ġprivate Ġvar Ġconfiguration : ĠProperty < String > Ġ= Ġproject . objects . property ( String :: class . java ) ĊĠ Ġprivate Ġvar Ġarchive Name : ĠProperty < String > Ġ= Ġproject . objects . property ( String :: class . java ) ĊĠ Ġprivate Ġvar Ġclass Path Configuration : ĠProperty < String > Ġ= Ġproject . objects . property ( String :: class . java ) ĊĠ Ġprivate Ġvar Ġpro guard Files Ġ= Ġmutable ListOf < Any >() ĊĠ Ġprivate Ġvar Ġstrip Gradle Api : ĠProperty < Boolean > Ġ= Ġproject . objects . property ( Boolean :: class . java ) ĊĠ Ġprivate Ġvar Ġexclude s : ĠList Property < String > Ġ= Ġproject . objects . list Property ( String :: class . java ) ĊĊĠ Ġprivate Ġval Ġbuild Dir Ġ= Ġproject . layout . build Directory . dir (" gr 8 /$ name "). get (). as File ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġconfiguration Ġto Ġinclude Ġin Ġthe Ġresulting Ġoutput Ġjar . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġconfiguration ( name : ĠString ) Ġ{ ĊĠĠĠ Ġconfiguration . set ( name ) ĊĠĠĠ Ġconfiguration . dis allow Changes () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġconfiguration Ġto Ġinclude Ġin Ġthe Ġresulting Ġoutput Ġjar . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġarchive Name ( name : ĠString ) Ġ{ ĊĠĠĠ Ġarchive Name . set ( name ) ĊĠĠĠ Ġarchive Name . dis allow Changes () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġjar Ġfile Ġto Ġinclude Ġin Ġthe Ġresulting Ġoutput Ġjar . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠDefault : Ġthe Ġjar Ġproduced Ġby Ġthe Ġ" jar " Ġtask ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġfile Ġa Ġfile Ġthat Ġwill Ġbe Ġevaluated Ġlike Ġ[ Project . file ]. ĠIf Ġthis Ġfile Ġis Ġcreated Ġby Ġanother Ġtask , Ġuse Ġa Ġprovider ĊĠĠ Ġ* Ġso Ġthat Ġthe Ġdependency Ġbetween Ġthe Ġtask Ġcan Ġbe Ġset Ġup ĊĠĠ Ġ*/ ĊĠ Ġfun Ġprogram Jar ( file : ĠAny ) Ġ{ ĊĠĠĠ Ġprogram Jar . set ( file ) ĊĠĠĠ Ġprogram Jar . dis allow Changes () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSee Ġ[ program Jar ] ĊĠĠ Ġ*/ ĊĠ Ġfun Ġprogram Jar ( task Provider : ĠTask Provider < Task >) Ġ{ ĊĠĠĠ Ġprogram Jar ( ĊĠĠĠĠĠĠĠ Ġtask Provider . flatMap Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġcheck ( task Ġis ĠAbstract Archive Task ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" only ĠAbstract Archive Tasks Ġlike ĠJar Ġor ĠZip Ġare Ġsupported " ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtask . archive File ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSee Ġ[ program Jar ] ĊĠĠ Ġ*/ ĊĠ Ġfun Ġprogram Jar ( task : ĠTask ) Ġ{ ĊĠĠĠ Ġcheck ( task Ġis ĠAbstract Archive Task ) Ġ{ ĊĠĠĠĠĠ Ġ" only ĠAbstract Archive Tasks Ġlike ĠJar Ġor ĠZip Ġare Ġsupported " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprogram Jar ( task . archive File ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAdds Ġadditional Ġj ars Ġon Ġthe Ġclasspath Ġ( but Ġnot Ġin Ġthe Ġoutput Ġjar ). ĊĠĠ Ġ* ĊĠĠ Ġ* ĠDefault : Ġ" compile Only " ĊĠĠ Ġ*/ ĊĠ Ġfun Ġclass Path Configuration ( name : ĠString ) Ġ{ ĊĠĠĠ Ġclass Path Configuration . set ( name ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAdds Ġthe Ġgiven Ġfile Ġas Ġa Ġpro guard - like Ġconfiguration Ġfile ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġfile Ġa Ġfile Ġthat Ġwill Ġbe Ġevaluated Ġlike Ġ[ Project . file ] ĊĠĠ Ġ*/ ĊĠ Ġfun Ġpro guard File ( file : ĠAny ) Ġ{ ĊĠĠĠ Ġpro guard Files . add ( file ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAdds Ġthe Ġgiven Ġfile Ġas Ġa Ġpro guard - like Ġconfiguration Ġfile ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġfile Ġa Ġfile Ġthat Ġwill Ġbe Ġevaluated Ġlike Ġ[ Project . file ] ĊĠĠ Ġ*/ ĊĠ Ġfun Ġpro guard Files ( var arg Ġfile : ĠAny ) Ġ{ ĊĠĠĠ Ġpro guard Files . addAll ( file ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġgradle - api Ġjar Ġtriggers Ġerrors Ġin ĠR 8 ĊĠĠ Ġ* ĊĠĠ Ġ* ĠClass Ġcontent Ġprovided Ġfor Ġtype Ġdescriptor Ġorg . gradle . internal . impl dep . META - INF . versions . 9 . org . junit . platform . commons . util . Module Utils $ Module Reference Scanner Ġactually Ġdefines Ġclass Ġorg . gradle . internal . impl dep . org . junit . platform . commons . util . Module Utils $ Module Reference Scanner ĊĠĠ Ġ* ĊĠĠ Ġ* ĠSetting Ġstrip Gradle Api ( true ) Ġwill Ġstrip Ġthese Ġclasses ĊĠĠ Ġ*/ ĊĠ Ġfun Ġstrip Gradle Api ( strip : ĠBoolean ) Ġ{ ĊĠĠĠ Ġstrip Gradle Api . set ( strip ) ĊĠ Ġ} ĊĊĠ Ġfun Ġexclude ( exclude : ĠString ) Ġ{ ĊĠĠĠ Ġthis . exclude s . add ( exclude ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdefault Program Jar (): ĠProvider < File > Ġ{ ĊĠĠĠ Ġreturn Ġproject . tasks . named (" jar "). flatMap Ġ{ ĊĠĠĠĠĠ Ġ( it Ġas ĠJar ). archive File ĊĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠ Ġit . as File ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġregister Tasks (): ĠTask Provider < Gr 8 Task > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġpipeline Ġis : ĊĠĠĠĠ Ġ* Ġ- ĠPatch Ġthe ĠKotlin Ġstdlib Ġto Ġmake ĠDefault Constructor Marker Ġnot - public Ġagain . ĠThis Ġis Ġto Ġprevent ĠR 8 Ġto Ġrewrite ĊĠĠĠĠ Ġ* ĠClass . forName (" kotlin . jvm . internal . Default Constructor Marker ") Ġto Ġa Ġconstant Ġpool Ġreference Ġthat Ġwill Ġmake Ġa Ġruntime ĊĠĠĠĠ Ġ* Ġexception Ġif Ġused Ġwith ĠKotlin Ġ 1 . 4 Ġat Ġruntime ĊĠĠĠĠ Ġ* Ġ- ĠTake Ġall Ġj ars Ġand Ġbuild Ġa Ġbig Ġembedded ĠJar , Ġkeeping Ġall ĠMETA - INF Ġfiles Ġand Ġonly Ġthe ĠMAN IFEST Ġfrom Ġthe Ġmain Ġjar ĊĠĠĠĠ Ġ* Ġ- ĠStrip Ġsome ĠJava 9 Ġfiles Ġfrom Ġgradle - api Ġbecause Ġit Ġtriggers ĊĠĠĠĠ Ġ* Ġcom . android . tools . r 8 . errors . Compilation Error : ĠClass Ġcontent Ġprovided Ġfor Ġtype Ġdescriptor Ġorg . gradle . internal . impl dep . META - INF . versions . 9 . org . junit . platform . commons . util . Module Utils Ġactually Ġdefines Ġclass Ġorg . gradle . internal . impl dep . org . junit . platform . commons . util . Module Utils ĊĠĠĠĠ Ġ* Ġ- ĠCall ĠR 8 Ġto Ġgenerate Ġthe Ġfinal Ġjar ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġval Ġconfiguration Ġ= Ġproject . configurations . get ByName ( configuration . or Null ĊĠĠĠĠĠĠĠ Ġ?: Ġerror (" shade Configuration Ġis Ġmandatory ")) ĊĊĠĠĠ Ġval Ġembedded Jar Provider Ġ= Ġproject . tasks . register ("${ name } Embedded Jar ", ĠEmbedded Jar Task :: class . java ) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠ Ġtask . exclude s . set ( exclude s ) ĊĠĠĠĠĠ Ġtask . main Jar ( program Jar . map Ġ{ Ġproject . file ( it ) Ġ}. orElse ( default Program Jar ())) ĊĠĠĠĠĠ Ġtask . other J ars ( configuration ) ĊĠĠĠĠĠ Ġtask . output Jar ( build Dir . resolve (" embedded . jar ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġclass Path Files Ġ= Ġproject . files () ĊĠĠĠ Ġif Ġ( class Path Configuration . isPresent ) Ġ{ ĊĠĠĠĠĠ Ġval Ġstrip Gradle Api Ġ= Ġstrip Gradle Api . getOrElse ( false ) ĊĊĠĠĠĠĠ Ġval Ġclass Path Configuration Ġ= Ġproject . configurations . get ByName ( class Path Configuration . get ()) ĊĠĠĠĠĠ Ġclass Path Files . from ( class Path Configuration . filter Ġ{ ĊĠĠĠĠĠĠĠ Ġ! strip Gradle Api Ġ|| Ġ! is Gradle Api ( it . name ) ĊĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠ Ġif Ġ( strip Gradle Api ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstrip Gradle Api Task Ġ= Ġproject . tasks . register ("${ name } Strip Gradle Api ", ĠStrip Gradle Api Task :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . gradle Api Jar ( class Path Configuration ) ĊĠĠĠĠĠĠĠĠĠ Ġit . stri pped Gradle Api Jar ( build Dir . resolve (" gradle - api - stri pped . jar ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclass Path Files . from ( strip Gradle Api Task . flatMap Ġ{ Ġit . stri pped Gradle Api Jar () Ġ}) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġclass Path Files . from ( class Path Configuration . filter Ġ{ Ġis Gradle Api ( it . name ) Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġr 8 Task Provider Ġ= Ġproject . tasks . register ("${ name } R 8 Jar ", ĠGr 8 Task :: class . java ) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠ Ġtask . program Files ( embedded Jar Provider . flatMap Ġ{ Ġit . output Jar () Ġ}) ĊĊĠĠĠĠĠ Ġtask . mapping ( File ( build Dir , Ġ" mapping . txt ")) ĊĠĠĠĠĠ Ġtask . class Path Files ( class Path Files ) ĊĊĠĠĠĠĠ Ġval Ġarchive Name Ġ= Ġarchive Name . getOrElse ("${ project . name }-${ project . version }- shadow ed . jar ") ĊĠĠĠĠĠ Ġtask . output Jar ( File ( build Dir , Ġarchive Name )) ĊĠĠĠĠĠ Ġtask . pro guard Configuration Files . from ( pro guard Files . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġr 8 Task Provider ĊĠ Ġ} Ċ }