/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠThe ĠSimple Cloud Ġauthors Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ċ Ġ* Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ċ Ġ* Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ċ Ġ* Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , Ċ Ġ* ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . Ċ Ġ* ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , Ċ Ġ* ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , Ċ Ġ* ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER Ċ Ġ* ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġeu . the simple cloud . runner Ċ Ċ import Ġeu . the simple cloud . runner . dependency . Dependency Loader Startup Ċ import Ġjava . io . File Ċ import Ġjava . net . URL Ċ import Ġjava . net . URL ClassLoader Ċ import Ġjava . nio . file . Files Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠIntelliJ ĠIDEA . Ċ Ġ* ĠDate : Ġ 2 9 . 0 8 . 2 0 2 0 Ċ Ġ* ĠTime : Ġ 0 7 : 4 6 Ċ Ġ* Ġ@ author ĠFre der ick ĠBa ier Ċ Ġ*/ Ċ Ċ private Ġval Ġcopied Dependency Loader File Ġ= ĠFile (" storage ", Ġ" dependency - loader . jar ") Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġcopy Dependency Loader OutOf Jar () ĊĊĠĠĠ Ġval Ġdependency Loader Startup Ġ= ĠDependency Loader Startup () ĊĊĠĠĠ Ġval Ġloaded Dependency Files Ġ= Ġdependency Loader Startup . load Dependencies To Resolve Dependencies () ĊĠĠĠ Ġval Ġloaded Dependency Urls Ġ= Ġloaded Dependency Files . map Ġ{ Ġit . to URI (). to URL () Ġ}. to Typed Array () ĊĊĠĠĠ Ġval Ġclass Loader Ġ= Ġinit ClassLoader ( loaded Dependency Urls ) ĊĠĠĠ ĠThread . currentThread (). context ClassLoader Ġ= Ġclass Loader ĊĊĠĠĠ Ġexecute Dependency Loader Main ( class Loader , Ġargs ) Ċ } Ċ Ċ fun Ġcopy Dependency Loader OutOf Jar () Ġ{ ĊĠĠĠ Ġval Ġlauncher Resource Ġ= ĠRunner ClassLoader :: class . java . getResource AsStream ("/ dependency - loader . jar ") ĊĠĠĠ Ġif Ġ(! copied Dependency Loader File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġcopied Dependency Loader File . parent File . mkdir s () ĊĠĠĠĠĠĠĠ ĠFiles . copy ( launcher Resource , Ġcopied Dependency Loader File . to Path ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġexecute Dependency Loader Main ( class Loader : ĠURL ClassLoader , Ġargs : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġloaded Class Ġ= Ġclass Loader . load Class (" eu . the simple cloud . loader . dependency . Dependency Loader Main Kt ") ĊĠĠĠ Ġval Ġmethod Ġ= Ġloaded Class . getMethod (" main ", ĠArray < String >:: class . java ) ĊĠĠĠ Ġmethod . invoke ( null , Ġargs ) Ċ } ĊĊ Ċ private Ġfun Ġinit ClassLoader ( loaded Dependencies : ĠArray < URL >): ĠURL ClassLoader Ġ{ ĊĠĠĠ Ġreturn ĠRunner ClassLoader ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( copied Dependency Loader File . to URI (). to URL (), Ġ* loaded Dependencies ) ĊĠĠĠ Ġ) Ċ }