Invalid Gradle JDK configuration found_带你了解Gradle编译速度是如何提升70%的
前言
Gradle作為一款基于Groovy語(yǔ)言的構(gòu)建工具,已經(jīng)吸引眾多的ant,maven使用者轉(zhuǎn)投gradle的懷抱,和Gradle相比,ant顯得冗余復(fù)雜,maven顯得有些死板落后,而gradle基于DSL語(yǔ)法,特點(diǎn)明顯:簡(jiǎn)潔、靈活、可讀性強(qiáng)。
背景
? Maven 的軟件代碼由 Apache 基金會(huì)維護(hù)。而基礎(chǔ)設(shè)施主要由 Sonatype、JFrog 兩家企業(yè)維護(hù),他們分別提供 Nexus 和 Artifactory 兩大 artifact 管理體系,維護(hù) Central 與 JCenter 兩大公共倉(cāng)庫(kù),并提供收費(fèi)的企業(yè)服務(wù)(咨詢、培訓(xùn)、認(rèn)證、定制開發(fā)、云服務(wù)、高級(jí)管理工具)。
? Gradle 則是由 Gradle Inc. 維護(hù),該企業(yè)也提供收費(fèi)的 Gradle Enterprise 解決方案。
首先要說(shuō)的是我們用的 Gradle 來(lái)作為我們的構(gòu)建工具,所以主要是針對(duì) Gradle 的命令來(lái)作了一些優(yōu)化。
1、修改 gradle build 的參數(shù)
- 使用 --build-cache
什么是 build cache(構(gòu)建緩存),在 Gradle 中,每一個(gè)待編譯的工程叫 Project,每一個(gè) Project 在構(gòu)建時(shí)都包含一系列的 task。
每個(gè) task 的輸入都可以作為下一個(gè) task 的輸出,build cache 做的事就是把可以緩存(注:并不是所有的 task 輸出都能緩存)的 task 輸出都緩存住,這樣在構(gòu)建過(guò)程中,如果發(fā)現(xiàn)這個(gè) task 的輸入不變,就沒必要重新執(zhí)行任務(wù)了,直接從 task ouput 緩存里拿即可,如下圖示,Build 2 的構(gòu)建輸入直接從 Build Cache 中拿,這樣 Build 1 就不用構(gòu)建了。
效果怎么樣呢,看下圖,下面圖分別顯示了 Gradle 持續(xù)集成時(shí)使用構(gòu)建緩存和不使用構(gòu)建緩存兩種情況下的聚合的構(gòu)建時(shí)間,可以看到使用了 cache 的 Gradle 構(gòu)建速度明顯快于不使用 cache 的情況。
更騷的是這個(gè) Buiid Cache 支持分布式的,可以統(tǒng)一把這些 cache 丟到一臺(tái)機(jī)器上,本地機(jī)器要編譯時(shí)統(tǒng)一去這臺(tái)機(jī)器拉 cache,這樣如果我們切換分支時(shí)執(zhí)行構(gòu)建也能用 Build Cache 來(lái)加快構(gòu)建速度。
--build-cache 的具有使用需要注意一些事項(xiàng),比如得 Gradle 4.3 以上才有效,建議大家直接去官網(wǎng)查查看。
- 增加 --parallel 參數(shù)
并行執(zhí)行在多項(xiàng)目編譯的項(xiàng)目中能有效提升編譯的速度,但是并行執(zhí)行的前提是每個(gè)項(xiàng)目已經(jīng)被模塊化,每個(gè)項(xiàng)目之間沒有耦合。
- 移除 --refresh-dependencies 參數(shù)
原來(lái) gradle build 有加這個(gè)參數(shù),這個(gè)參數(shù)會(huì)忽略緩存,強(qiáng)制重新下載,顯然是編譯的瓶頸。
2、任務(wù)并行
原來(lái) Jenkins 中執(zhí)行 Gradle 編譯任務(wù),每個(gè) Task 是串行執(zhí)行的,總編譯耗時(shí)是每個(gè)任務(wù)執(zhí)行時(shí)間的總和。
現(xiàn)在把它改成了并行的
顯然并行執(zhí)行會(huì)快得多。
3、將大項(xiàng)目工程中的常用代碼抽成 jar 包
對(duì)于業(yè)務(wù)方來(lái)說(shuō),采用這種方式也是提升編譯速度的有效手段 ,將大量代碼抽成 jar 包,意味著它們本身就是字節(jié)碼了,在 gradle build 時(shí)就不用編譯啦。自然能提升整個(gè)工程的編譯打包時(shí)間。
總結(jié)
如果你 Gradle 用得越多,越能體會(huì)到這種理念上的差異。
- Maven 作為一個(gè)依賴管理工具而誕生,對(duì)于它上層的商業(yè)形態(tài)而言,這個(gè)工具只是基礎(chǔ)之一,這不影響它的工具屬性;
- Gradle 作為一個(gè)構(gòu)建工具而誕生,它的商業(yè)形態(tài)圍繞著這個(gè)核心而展開,這影響它的工具屬性。
總結(jié)
以上是生活随笔為你收集整理的Invalid Gradle JDK configuration found_带你了解Gradle编译速度是如何提升70%的的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 路由器设置转发端口如何对路由器进行端口转
- 下一篇: 使用路由器网速慢如何自行排查如何排查路由