曹工雜談:Linux服務器上,Spring Boot 原地修改 jar 包配置文件/替換class文件,免去重復上傳的麻煩


一、前言

相信很多同學有這樣的需求,現在很多公司都有多地的研發中心,經常需要跨地區部署,比如,博主人在成都,但是服務器是北京的。一般城市間網絡都不怎么好,上傳一個幾十兆的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包)?

 

五、spring boot jar包如何解壓出指定的文件

jar -xvf  xxx.jar  BOOT-INF/classes/application.properties BOOT-INF/classes/application-dev.properties BOOT-INF/classes/application-dev.yml BOOT-INF/classes/application.yml

上述這個命令,就是從jar包中,把配置文件提取出來

 相關參考可見man jar:

Extract JAR file

jar x[vf] [jarfile] file ... [-Joption ...] [@arg-file ...]

 

總結

今天這篇個人感覺不算豐滿,但感覺沒太多好寫的,不像理論知識那些。不過這個還是蠻重要的,能解決開發中的實際問題,提升大家的效率吧。

參考:

如何用終端命令刪除jar包中指定的文件或文件夾

https://blog.csdn.net/xiligey1/article/details/82457140

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM