/* Ċ Ġ* ĠMaven Local Plugin . kt Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 6 - 2 0 1 7 , ĠE rik ĠC . ĠTh au vin Ġ( erik @ th au vin . net ) Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* ĠĠ ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* ĠĠ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* ĠĠ ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* ĠĠ ĠNeither Ġthe Ġname Ġof Ġthis Ġproject Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ġbe Ċ Ġ* ĠĠ Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ċ Ġ* ĠĠ Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* Ġ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 ĠHOLDER Ġ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 Ġnet . th au vin . erik . k ob alt . plugin . maven . local Ċ Ċ import Ġcom . be ust . k ob alt . api . Base Plugin Ċ import Ġcom . be ust . k ob alt . api . IL ocal Maven Repo Path Interceptor Ċ import Ġcom . be ust . k ob alt . misc . log Ċ import Ġcom . be ust . k ob alt . misc . warn Ċ import Ġorg . apache . maven . settings . building . Default Settings BuilderFactory Ċ import Ġorg . apache . maven . settings . building . Default Settings Building Request Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util .* Ċ Ċ class ĠMaven Local Plugin Ġ: ĠBase Plugin (), ĠI Local Maven Repo Path Interceptor Ġ{ ĊĠĠĠ Ġval ĠM AV EN _ LOCAL _ REPO _ PROPERTY Ġ= Ġ" maven . repo . local " ĊĊĠĠĠ Ġvar Ġmvn Local Path : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" Maven ĠLocal ĠRepository " ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( System . getProperties (). containsKey ( MA VEN _ LOCAL _ REPO _ PROPERTY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmvn Local Path Ġ= ĠSystem . getProperty ( MA VEN _ LOCAL _ REPO _ PROPERTY ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠProperties () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPaths . get (" local . properties "). let Ġ{ Ġpath Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . to File (). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . new InputStream ( path ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . load ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . containsKey ( MA VEN _ LOCAL _ REPO _ PROPERTY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmvn Local Path Ġ= Ġp . getProperty ( MA VEN _ LOCAL _ REPO _ PROPERTY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( mvn Local Path . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Home Ġ= ĠSystem . getProperty (" user . home ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠDefault Settings BuilderFactory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġfactory . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠDefault Settings Building Request () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . system Properties Ġ= ĠSystem . getProperties () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . user Settings File Ġ= ĠFile ( user Home , Ġ". m 2 / settings . xml ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm 2 Home Ġ= ĠSystem . getenv (" M 2 _ HOME ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m 2 Home . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . global Settings File Ġ= ĠFile ( m 2 Home , Ġ" conf / settings . xml ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbuilder . build ( settings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmvn Local Path Ġ= Ġresult . effective Settings . local Repository ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mvn Local Path . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠFile ( user Home , Ġ". m 2 / repository ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmvn Local Path Ġ= Ġpath . absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarn (" Unable Ġto Ġparse Ġlocal Ġmaven Ġsettings .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrepo Path ( current Path : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mvn Local Path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( 2 , Ġ" Setting ĠMaven ĠLocal ĠRepository Ġpath Ġto : Ġ" Ġ+ Ġmvn Local Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmvn Local Path . toString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent Path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }