mvn打包瘦身小妙招, get!
阿新 • • 發佈:2020-08-09
微服務專案越來越多,特別是一個父工程下有多個子工程這種,每次打包都發現一個包至少都有40~50M;但是實際上有的專案程式碼是沒有多少的,那為什麼打完包後還是有這麼大呢?
其實就是因為打成的包是一個可執行的jar,對應的依賴jar也被打包進去了。但是對於專案來說,專案的依賴的jar就那麼多,我們能不能在打包單個微服務時,不將這些依賴的jar打包進去,而是在專案執行啟動的時候指定依賴jar的地址讓其執行就可以了呢?
答案是肯定的,maven改寫下配置檔案即可實現。話不多說,我們開始:
直接執行打包
這裡以一個開源的專案bootdo為例,直接用idea打包
我們可以看到,88M之多!
我們將打包後的這個資料夾改名增加字尾“_old”,並且資料夾型別改為zip後,再使用命令解壓,命令如下:
unzip -d bootdo-2.0.0_old bootdo-2.0.0_old.zip
如下圖所示:
我們點開解壓後的檔案,可以看到專案依賴的jar包都在BOOT-INF/lib下;後面我們將指定這個地址為專案依賴地址!
更改mvn打包配置
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> <fork>true</fork> <!-- spring-boot:run 中文亂碼解決 --> <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments> <mainClass>com.bootdo.BootdoApplication</mainClass> <layout>ZIP</layout> <!--注:若是有子工程可以多個這樣新增進來,我這裡bootdo就是一個單獨的工程所以這裡我只新增一個即可 --> <includes> <include> <groupId>com.bootdo</groupId> <artifactId>bootdo</artifactId> </include> </includes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
新增這些配置後,我們再次打包看下大小(注:直接package,不要先clean,因為你改了之前打包的名稱,不會覆蓋原有的,一旦你clean了之前你解壓的檔案都沒了!):
可以看到,我們打完包後只有21M的一個大小了,因為本專案包含了很多靜態檔案,例如圖片圖示啥的(其實這些都可以無失真壓縮下的)所以還是有20M多,但是基本已經是以前的1/4大小了;
如何啟動
很明顯,我們直接執行現在的jar包是無法執行的,我們必須告訴編譯器專案執行jar的位置
java -Dloader.path=./bootdo-2.0.0_old/BOOT-INF/lib/ -jar bootdo-2.0.0.jar
如下圖所示,我們指定了mvn其他依賴的位置後,就可以啟動此專案了;
小結:這是我本地的演示,那麼實際到專案上時,我們可以第一次打包將需要的jar包放到指定的位置,後面jenkin部署或手動啟動時,指定路徑即可。是不是很簡單,那就趕快嘗試下吧!