Invalid Gradle JDK configuration found_带你了解Gradle编译速度是如何提升70%的
前言
Gradle作為一款基于Groovy語言的構建工具,已經吸引眾多的ant,maven使用者轉投gradle的懷抱,和Gradle相比,ant顯得冗余復雜,maven顯得有些死板落后,而gradle基于DSL語法,特點明顯:簡潔、靈活、可讀性強。
背景
? Maven 的軟件代碼由 Apache 基金會維護。而基礎設施主要由 Sonatype、JFrog 兩家企業維護,他們分別提供 Nexus 和 Artifactory 兩大 artifact 管理體系,維護 Central 與 JCenter 兩大公共倉庫,并提供收費的企業服務(咨詢、培訓、認證、定制開發、云服務、高級管理工具)。
? Gradle 則是由 Gradle Inc. 維護,該企業也提供收費的 Gradle Enterprise 解決方案。
首先要說的是我們用的 Gradle 來作為我們的構建工具,所以主要是針對 Gradle 的命令來作了一些優化。
1、修改 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 以上才有效,建議大家直接去官網查查看。
- 增加 --parallel 參數
并行執行在多項目編譯的項目中能有效提升編譯的速度,但是并行執行的前提是每個項目已經被模塊化,每個項目之間沒有耦合。
- 移除 --refresh-dependencies 參數
原來 gradle build 有加這個參數,這個參數會忽略緩存,強制重新下載,顯然是編譯的瓶頸。
2、任務并行
原來 Jenkins 中執行 Gradle 編譯任務,每個 Task 是串行執行的,總編譯耗時是每個任務執行時間的總和。
現在把它改成了并行的
顯然并行執行會快得多。
3、將大項目工程中的常用代碼抽成 jar 包
對于業務方來說,采用這種方式也是提升編譯速度的有效手段 ,將大量代碼抽成 jar 包,意味著它們本身就是字節碼了,在 gradle build 時就不用編譯啦。自然能提升整個工程的編譯打包時間。
總結
如果你 Gradle 用得越多,越能體會到這種理念上的差異。
- Maven 作為一個依賴管理工具而誕生,對于它上層的商業形態而言,這個工具只是基礎之一,這不影響它的工具屬性;
- Gradle 作為一個構建工具而誕生,它的商業形態圍繞著這個核心而展開,這影響它的工具屬性。
總結
以上是生活随笔為你收集整理的Invalid Gradle JDK configuration found_带你了解Gradle编译速度是如何提升70%的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由器设置转发端口如何对路由器进行端口转
- 下一篇: iphone屏幕录制_iPhone怎么内