一、前言
相信很多同學有這樣的需求,現在很多公司都有多地的研發中心,經常需要跨地區部署,比如,博主人在成都,但是伺服器是北京的。一般城市間網路都不怎麼好,上傳一個幾十兆的jar包那是真的慢,別說現在微服務架構下,動輒兩位數的fat jar。這裡說的jar,就是spring boot專案打出來的fat jar型別,一般也有個幾十兆吧。
博主之前還遇到部署北美亞馬遜環境,好不容易傳個包過去,後來發現有bug,需要改class,如果重新打包再傳,真的要死的心都有了。
如果要改什麼配置,或者發現某個class檔案有bug,那怎麼辦呢?不要急,今天就是教你怎麼解決這種簡單問題。
二、修改配置檔案
這個非常簡單,只要使用vim即可,真正的屠龍工具。
比如當前目錄下有個spring boot 的jar包,我們可以按如下步驟:
如上圖所示,我們直接vim xxx.jar包後,可以通過 /關鍵字 來查詢檔案,查詢到以後,通過方向鍵進行控制,enter 進入檔案,修改檔案、儲存等操作和vim的操作一樣。
三、修改jar包中的class
1、方式1,jar命令替換
如果只是簡單地替換檔案,可以直接使用 以下命令:
jar uvf pas-server.jar com/ceiec/pas/server/service/impl/IncidentServiceImpl
我是不推薦該命令的,因為很麻煩,要自己去新建一級一級的目錄,而且一般class檔案的包名都是以 . 來分隔的,還要手動修改為檔案分隔符。其次,如果輸錯了路徑,再想刪掉這個class就麻煩了。
2、方式2,解壓後再壓縮的方式(極力推薦)
細分為以下幾個步驟:
1、拷貝jar包為一個zip檔案
cp pas-server.jar pas-server.zip
2、解壓zip到指定資料夾
unzip pas-server.zip -d pas-server-unzip/
3、進入解壓後的資料夾,修改檔案
解壓後的spring boot包的結構如下,class自行修改即可(在BOOT-INF下面),我一般rz上傳後,直接覆蓋:
4、重新打為spring boot 的fat包
jar -cvfM0 pas-server.jar BOOT-INF/ META-INF/ org/
結果如下:
可以看到,在pas-server.jar後,我們指定了多個目錄,這幾個目錄即是spring boot 的那幾個目錄。
上述 jar 命令中相關的引數如下:
四、普通非spring boot工程如何打包為fat jar
博主前幾天隨便記錄的,和這個主題有點關係,比較適用於netty工程:
普通的maven專案,如何打成一個fat jar(包括了全部依賴jar包)?
五、總結
今天這篇個人感覺不算豐滿,但感覺沒太多好寫的,不像理論知識那些。不過這個還是蠻重要的,能解決開發中的實際問題,提升大家的效率吧。