Gradle build 慢?多是你使用的姿式不對

以前我司每一個 Java 應用部署到預發都要等待漫長的編譯打包時間,很是地痛苦!大項目編譯時間經常達到接近 10 分鐘,生命短暫啊,人生有多少個 10 分鐘能夠等待,因而個人效能團隊針對編譯做了一些優化,提速很是明顯,對某個應用的測試來看,編譯時間從 160 s 縮短到了 50 s 左右,提高近 70%,你們紛紛點贊,那麼效能團隊作了哪些措施來讓編譯速度提高這麼明顯呢?緩存

首先要說的是咱們用的 Gradle 來做爲咱們的構建工具,因此主要是針對 Gradle 的命令來做了一些優化分佈式

一、修改 gradle build 的參數

  • 使用 --build-cache

什麼是 build cache(構建緩存),在 Gradle 中,每個待編譯的工程叫 Project,每個 Project 在構建時都包含一系列的 task模塊化

每一個 task 的輸入均可以做爲下一個 task 的輸出,build cache 作的事就是把能夠緩存(注:並非全部的 task 輸出都能緩存)的 task 輸出都緩存住,這樣在構建過程當中,若是發現這個 task 的輸入不變,就不必從新執行任務了,直接從 task ouput 緩存裏拿便可,以下圖示,Build 2 的構建輸入直接從 Build Cache 中拿,這樣 Build 1 就不用構建了。工具

效果怎麼樣呢,看下圖,下面圖分別顯示了 Gradle 持續集成時使用構建緩存和不使用構建緩存兩種狀況下的聚合的構建時間,能夠看到使用了 cache 的 Gradle 構建速度明顯快於不使用 cache 的狀況學習

更騷的是這個 Buiid Cache 支持分佈式的,能夠統一把這些 cache 丟到一臺機器上,本地機器要編譯時統一去這臺機器拉 cache,這樣若是咱們切換分支時執行構建也能用 Build Cache 來加快構建速度測試

--build-cache 的具備使用須要注意一些事項,好比得 Gradle 4.3 以上纔有效,建議你們直接去官網查查看gradle

  • 增長 --parallel 參數

並行執行在多項目編譯的項目中能有效提高編譯的速度,可是並行執行的前提是每一個項目已經被模塊化,每一個項目之間沒有耦合。優化

  • 移除 --refresh-dependencies 參數

原來 gradle build 有加這個參數,這個參數會忽略緩存,強制從新下載,顯然是編譯的瓶頸ui

二、任務並行

原來 Jenkins 中執行 Gradle 編譯任務,每一個 Task 是串行執行的,總編譯耗時是每一個任務執行時間的總和。3d

如今把它改爲了並行的

顯然並行執行會快得多

三、將大項目工程中的經常使用代碼抽成 jar 包

對於業務方來講,採用這種方式也是提高編譯速度的有效手段 ,將大量代碼抽成 jar 包,意味着它們自己就是字段碼了,在 gradle build 時就不用編譯啦。

但願本文對你有幫助,記得點個在看哦 ^_^

歡迎關注公號,共同交流學習

相關文章
相關標籤/搜索