我們的項(xiàng)目是基于Spring Boot 開(kāi)發(fā)的组去,所以打包時(shí)用的插件也是spring-boot-maven-plugin,打包的jar直接就可以使用 nohup java -jar xxxx.jar& 運(yùn)行拧额,很方便。但問(wèn)題是:jar包太大,上傳很慢慷嗜。所有的依賴都在這個(gè)jar包里穷缤,重點(diǎn)是除了我們項(xiàng)目自身引用的模塊會(huì)改變,其余第三方的依賴只要版本定了基本都不會(huì)再改變三椿,所以我們的目標(biāo)就是將那些不變的剔除出去缺菌。
首先使用Maven-dependency-plugin插件將所有的jar包打包到指定的文件夾:
如果Maven clean install的時(shí)候沒(méi)有出錯(cuò),在jar包的Boot-INF 包里面會(huì)有l(wèi)ib文件夾(也可以指定到其他的文件夾)搜锰,里面就是全部的依賴伴郁。
將lib壓縮后上傳的服務(wù)器指定的目錄,并使用unzip 命令解壓蛋叼,默認(rèn)解壓到當(dāng)前的目錄(還可以使用 -d 參數(shù)解壓到指定的文件夾下), ----( 此處有坑焊傅,下面有填坑的方法);
在將pom文件里面的Maven-dependency-plugin查件注釋掉狈涮,只使用spring boot 的插件狐胎,并使用 <includes>將自己項(xiàng)目的模塊包含進(jìn)來(lái),因?yàn)樽约喉?xiàng)目的模塊在開(kāi)發(fā)的過(guò)程中會(huì)改變歌馍。如圖:
自己項(xiàng)目的模塊有引用那些就都包含進(jìn)來(lái)握巢。
此時(shí)在運(yùn)行 Maven clean install ,在看打不來(lái)的包會(huì)很小,因?yàn)閘ib文件夾下只有我們包含進(jìn)來(lái)的jar包松却,準(zhǔn)確的說(shuō):只有我們自己項(xiàng)目以及自己模塊的jar包暴浦,非常的小溅话。
這時(shí)候就換一種啟動(dòng)命令:
nohup java -Dloader.path="xxxxxx" -jar xxxx.jar &
雙引號(hào)下填寫(xiě)的是:剛才你上傳lib文件相對(duì)于當(dāng)前的路徑独撇;告訴機(jī)器啟動(dòng)的時(shí)候去哪個(gè)地方加載額外的依賴屑墨。
按照以上方法,再次啟動(dòng)的時(shí)候券勺,還是啟動(dòng)不成功绪钥,報(bào)的錯(cuò)誤是:部分內(nèi)容已經(jīng)加載過(guò)了或者xml文件資源重復(fù)之類的錯(cuò)誤;這時(shí)找到lib文件夾关炼,仔細(xì)查看會(huì)發(fā)現(xiàn)里面有我們自己的模塊的依賴程腹,這個(gè)跟我們使用<includes>打包出來(lái)的jar里面的有重復(fù),只要將lib 文件夾下的模塊刪除就ok了儒拂。
以后在啟動(dòng)的時(shí)候只要使用 nohup java -Dloader.path="xxxxxx" -jar xxxx.jar & 就可以了寸潦;
上面的方式適用于服務(wù)器的操作權(quán)或者部分操作權(quán)的在開(kāi)發(fā)這邊的,如果開(kāi)發(fā)沒(méi)有操作權(quán)或者運(yùn)維不配合社痛,那就還是使用fat jar 好了见转。