1. 程式人生 > 實用技巧 >mvn打包瘦身小妙招, get!

mvn打包瘦身小妙招, get!

微服務專案越來越多,特別是一個父工程下有多個子工程這種,每次打包都發現一個包至少都有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部署或手動啟動時,指定路徑即可。是不是很簡單,那就趕快嘗試下吧!