package Ġcom . win dea . plugin . idea . par ad ox . tool Ċ Ċ import Ġcom . intellij . util . io .* Ċ import Ġjava . io .* Ċ import Ġjava . util . concurrent .* Ċ import Ġjava . util . concurrent . atomic .* Ċ import Ġjava . util . zip .* Ċ import Ġkotlin . system .* Ċ Ċ object ĠMod Pack ager Ġ{ Ċ ĉ private Ġconst Ġval Ġdefault PackageName Ġ= Ġ" mod . zip " ĊĉĊ ĉ /** Ċĉ Ġ* Ġå°Ĩ æĮĩå®ļçļĦ mod åĪĹè¡¨ çĽ®å½ķ ä¸ŃçļĦ æīĢæľī mod çĽ®å½ķ ä¸ŃçļĦ æĸĩä»¶ æīĵ åĮħ åĪ° è¯¥ mod çĽ®å½ķ ä¸Ń ãĢĤ Ċĉ Ġ*/ Ċ ĉ fun Ġpackage Mods ( mod List Path : ĠString , ĠpackageName : ĠString Ġ= Ġdefault PackageName , Ġparallel ism : ĠInt Ġ= Ġ 1 6 ) Ġ{ Ċĉ ĉ val Ġdirs Ġ= ĠFile ( mod List Path ). list Files () Ġ?: Ġreturn Ċĉ ĉ do Package Mods ( dirs , ĠpackageName , Ġparallel ism ) Ċ ĉ } ĊĉĊ ĉ /** Ċĉ Ġ* Ġå°Ĩ æĮĩå®ļçļĦ mod çĽ®å½ķ ä¸ŃçļĦ æĸĩä»¶ æīĵ åĮħ åĪ° è¯¥ mod çĽ®å½ķ ä¸Ń ãĢĤ Ċĉ Ġ*/ Ċ ĉ fun Ġpackage Mod ( mod Path : ĠString , ĠpackageName : ĠString Ġ= Ġdefault PackageName ) Ġ{ Ċĉ ĉ val Ġdir Ġ= ĠFile ( mod Path ) Ċĉ ĉ do Package Mod ( dir , ĠpackageName ) Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġdo Package Mods ( mod Dirs : ĠArray < File >, ĠpackageName : ĠString , Ġparallel ism : ĠInt ) Ġ{ Ċĉ ĉ try Ġ{// å¹¶ åıĳ æīĵ åĮħ mod Ċĉĉ ĉ val Ġexecutor Ġ= ĠExec utors . new Work Ste aling Pool ( parallel ism ) Ċĉĉ ĉ val Ġtotal Ġ= Ġmod Dirs . size Ċĉĉ ĉ val Ġdone Ġ= ĠAtomicInteger ( 0 ) Ċĉĉ ĉ val Ġcount DownLatch Ġ= ĠCount DownLatch ( total ) Ċĉĉ ĉ println (" Package Ġmods ... Ġ( total : Ġ$ total )") Ċĉĉ ĉ for ( mod Dir Ġin Ġmod Dirs ) Ġ{ Ċĉĉĉ ĉ executor . execute Ġ{ Ċĉĉĉĉ ĉ println (" Package Ġmod Ġ'${ mod Dir . path }' ... Ġ( total : Ġ$ total , Ġdone : Ġ$ done )") Ċĉĉĉĉ ĉ val Ġtime Ġ= Ġmeasure Time Millis Ġ{ Ċĉĉĉĉĉ ĉ try Ġ{ Ċĉĉĉĉĉĉ ĉ do Package ( mod Dir , ĠpackageName ) Ċĉĉĉĉĉ ĉ } Ġcatch ( e : ĠException ) Ġ{ Ċĉĉĉĉĉĉ ĉ println (" Package Ġmods Ġfailed . ĠAn Ġexception Ġis Ġthrown :") Ċĉĉĉĉĉĉ ĉ e . printStackTrace () Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ }. let Ġ{ Ġformat Time ( it ) Ġ} Ċĉĉĉĉ ĉ count DownLatch . count Down () Ċĉĉĉĉ ĉ done . increment AndGet () Ċĉĉĉĉ ĉ println (" Package Ġmod Ġ'${ mod Dir . path }' Ġfinished . Ġ( total : Ġ$ total , Ġdone : Ġ$ done , Ġcost : Ġ$ time )") Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ // çŃīå¾ħ æīĢæľīçļĦ mod æīĵ åĮħ å®Į æ¯ķ ï¼Ī åı¯èĥ½ éľĢè¦ģ å¾Ī éķ¿ æĹ¶éĹ´ ï¼ī Ċĉĉ ĉ count DownLatch . await () Ċĉĉ ĉ println (" Package Ġmods Ġfinished . Ġ( total : Ġ$ total )") Ċĉ ĉ } Ġcatch ( e : ĠException ) Ġ{ Ċĉĉ ĉ println (" Package Ġmods Ġfailed . ĠAn Ġexception Ġis Ġthrown :") Ċĉĉ ĉ e . printStackTrace () Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġdo Package Mod ( mod Dir : ĠFile , ĠpackageName : ĠString ) Ġ{ Ċĉ ĉ try Ġ{ Ċĉĉ ĉ println (" Package Ġmod Ġ'${ mod Dir . path }' Ġ... ") Ċĉĉ ĉ val Ġtime Ġ= Ġmeasure Time Millis Ġ{ Ċĉĉĉ ĉ do Package ( mod Dir , ĠpackageName ) Ċĉĉ ĉ }. let Ġ{ Ġformat Time ( it ) Ġ} Ċĉĉ ĉ println (" Package Ġmod Ġ'${ mod Dir . path }' Ġfinished . Ġ( cost : Ġ$ time )") Ċĉ ĉ } Ġcatch ( e : ĠException ) Ġ{ Ċĉĉ ĉ println (" Package Ġmods Ġfailed . ĠAn Ġexception Ġis Ġthrown :") Ċĉĉ ĉ e . printStackTrace () Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġdo Package ( mod Dir : ĠFile , ĠpackageName : ĠString ) Ġ{ Ċĉ ĉ if ( mod Dir . isDirectory ) Ġ{ Ċĉĉ ĉ val Ġchildren Ġ= Ġmod Dir . list Files () Ġ?: Ġreturn Ċĉĉ ĉ // åĪłéĻ¤ å·² åŃĺåľ¨ çļĦ åİĭç¼© åĮħ ï¼Į è·³ è¿ĩ æľ¬ èº« å·² æīĵ åĮħ çļĦ mod çĽ®å½ķ Ċĉĉ ĉ for ( child Ġin Ġchildren ) Ġ{ Ċĉĉĉ ĉ if ( child . name Ġ== ĠpackageName ) Ġ{ Ċĉĉĉĉ ĉ child . delete () Ċĉĉĉ ĉ } Ġelse Ġif ( child . extension Ġ== Ġ" zip ") Ġ{ Ċĉĉĉĉ ĉ return Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ // æīĵ åĮħ mod çĽ®å½ķ ä¸ŃçļĦ æīĢæľī æĸĩä»¶ åĴĮ çĽ®å½ķ ï¼Į éĻ¤äºĨ zip æĸĩä»¶ ï¼Į åĪ° mod çĽ®å½ķ ä¸ŃçļĦ mod . zip åİĭç¼© åĮħ Ċĉĉ ĉ val Ġzip Ġ= Ġmod Dir . resolve ( packageName ) Ċĉĉ ĉ val Ġf os Ġ= ĠFileOutputStream ( zip ) Ċĉĉ ĉ val Ġz os Ġ= ĠZip OutputStream ( fos ) Ċĉĉ ĉ for ( child Ġin Ġchildren ) Ġ{ Ċĉĉĉ ĉ if ( child . extension Ġ!= Ġ" zip ") Ġ{ Ċĉĉĉĉ ĉ Zip Util . add File Or Dir Re cursively ( zos , Ġnull , Ġchild , Ġchild . name , Ġnull , Ġnull ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ zos . close () Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ private Ġfun Ġformat Time ( milli second : ĠLong ): ĠString Ġ{ Ċĉ ĉ return Ġ"${ milli second Ġ/ Ġ 1 0 0 0 . 0 } s " Ċ ĉ } Ċ }