在Kotlin中使用Gradle构建缓存
Kotlin 1.2.21允許Kotlin項(xiàng)目使用構(gòu)建緩存。通過Gradle的構(gòu)建緩存功能,可以提升Kotlin代碼的編譯速度,加快開發(fā)周期。本文將結(jié)合實(shí)際例子,介紹利用Gradle加速Kotlin代碼編譯的原理、配置示例以及在IDE中的使用方法。
\\構(gòu)建緩存允許Gradle可以復(fù)用任何之前調(diào)用(包括那些來自其它機(jī)器的調(diào)用)的任務(wù)產(chǎn)出。Kotlin 1.2.21允許Kotlin項(xiàng)目使用構(gòu)建緩存。
\\構(gòu)建緩存的工作原理是在緩存中存儲(chǔ)編譯過的類、測(cè)試結(jié)果和其它構(gòu)建工序,同時(shí)記錄所有的任務(wù)輸入,包括輸入文件內(nèi)容、相關(guān)的類路徑和任務(wù)配置。
\\\\這常常導(dǎo)致更快的構(gòu)建。下面的圖標(biāo)展示了在Gradle的持續(xù)集成中使用構(gòu)建緩存和不使用構(gòu)建緩存所收集到的構(gòu)建時(shí)間:
\\\\本文中,我們將向你闡述,如何使用Gradle的構(gòu)建緩存來避免不必要的Kotlin編譯,從而加快你的構(gòu)建過程。
\\Spek快速示例
\\你現(xiàn)在就可以嘗試使用Gradle的構(gòu)建緩存。只需要遵循下面幾個(gè)步驟:
\\Clone Spek?
\\\git clone https://github.com/spekframework/spek.git\cd spek\\Spek 2.x分支(其默認(rèn)分支)已經(jīng)有我們后續(xù)要介紹的構(gòu)建緩存的所有先決條件。
\\構(gòu)建和填充緩存
\\下面的命令會(huì)構(gòu)建Spek并填充本地構(gòu)建緩存。
\\\? ./gradlew assemble --build-cache\\BUILD SUCCESSFUL in 10s\21 actionable tasks: 21 executed\\使用--build-cache標(biāo)識(shí),可以讓Gradle在一個(gè)獨(dú)立的任務(wù)結(jié)果緩存中存儲(chǔ)任務(wù)結(jié)果。
\\刪除/更改構(gòu)建結(jié)果
\\這模擬了在另一臺(tái)機(jī)器上的情況或者做了一次改變并stash(存儲(chǔ))這次改變的情況。演示的最快方法是使用clean任務(wù)。
\\\? ./gradlew clean\\\\從構(gòu)建緩存中重新構(gòu)建
\\當(dāng)我們重新構(gòu)建時(shí),從構(gòu)建緩存中拉取所有編譯過的Kotlin源碼。
\\\? ./gradlew assemble --build-cache\\BUILD SUCCESSFUL in 2s\21 actionable tasks: 11 executed, 10 from cache\\\\就是這樣!通過使用Gradle的構(gòu)建緩存,你重用了編譯過的Kotlin類,而不是又重新編譯!構(gòu)建速度差不多快了5倍!
\\你可以從這次構(gòu)建觀測(cè)中看到,Kotlin編譯任務(wù)從構(gòu)建緩存中拉取緩存結(jié)果;而:jar和:processResources任務(wù)沒有從緩存中拉取,因?yàn)樗鼈儽镜厣蒍AR包和復(fù)制文件的速度比從緩存中拉取緩存結(jié)果的速度更快。另外Gradle構(gòu)建緩存也支持緩存:test任務(wù)。
\\當(dāng)持續(xù)集成的一個(gè)實(shí)例填充了一個(gè)共享的構(gòu)建緩存(開發(fā)者可以從中拉取)時(shí),Gradle構(gòu)建緩存會(huì)特別有效。下文羅列了實(shí)現(xiàn)這點(diǎn)的更多資源的鏈接。
\\為你的項(xiàng)目啟用構(gòu)建緩存
\\我希望你會(huì)在自己的項(xiàng)目上嘗試使用構(gòu)建緩存——你可以遵循下面的步驟來啟用構(gòu)建緩存。
\\首先,你需要確保正在使用Gradle 4.3或者更高版本,這樣才能選擇Kotlin Gradle Plugin來使用新的Gradle APIs。你可以方便地使用Gradle wrapper升級(jí)Gradle。
\\然后,你需要確保正在使用Kotlin 1.2.20或更高版本來進(jìn)行編譯。你在自己的構(gòu)建腳本build.gradle中的buildscript {}塊中配置類似如下的聲明:
\\\dependencies {\ classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.21\"\}\\\\然后,我們需要讓Gradle使用構(gòu)建緩存。有3種啟用構(gòu)建緩存的方法:
\\- 在命令行中使用--build-cache來為當(dāng)前構(gòu)建啟用構(gòu)建緩存。\\t
- 在$PROJECT_ROOT/gradle.properties中增加org.gradle.caching=true來為整個(gè)項(xiàng)目啟用構(gòu)建緩存。\\t
- 在$GRADLE_HOME/gradle.properties中增加org.gradle.caching=true來為當(dāng)前用戶的所有構(gòu)建啟用構(gòu)建緩存。\
注意: Android開發(fā)者即使設(shè)置了android.enableBuildCache=true,也仍需要按照上述方法啟用構(gòu)建緩存,因?yàn)镚radle的構(gòu)建緩存是獨(dú)立于Android的構(gòu)建緩存的。
\\我們可以選擇通過將run和test actions委派給Gradle的方式,來利用IDE的構(gòu)建緩存。
\\在IntelliJ中啟用構(gòu)建緩存
\\如果你使用IntelliJ來執(zhí)行Gradle actions,你需要在IDE配置中勾選“Delegate IDE build/run actions to Gradle(將IDE 構(gòu)建/運(yùn)行動(dòng)作委派給Gradle)”,從而在IntelliJ中構(gòu)建和運(yùn)行測(cè)試時(shí)利用構(gòu)建緩存。
\\\\注意: Android Studio默認(rèn)這樣做。
\\緩存kapt任務(wù)
\\目前即使使用--build-cache,針對(duì)kapt的緩存也默認(rèn)是禁用的,因?yàn)镚radle還沒有一種方法來映射注解處理器的輸入和輸出。你可以通過在kapt配置中將useBuildCache設(shè)置為true來明確啟用針對(duì)Kotlin注解處理任務(wù)的構(gòu)建緩存。
\\\kapt {\useBuildCache = true\}\\\\推薦讀物
\\你可以通過下列資源來了解更多關(guān)于利用Gradle構(gòu)建緩存的信息:
\\- Configuring the build cache\\t
- Setting up a shared, remote build cache ??\\t
- Debugging build cache misses\\t
- Developing cacheable custom tasks\
結(jié)論
\\使用kotlin-gradle-plugin 1.2.20及以上版本編譯Kotlin代碼,可以利用Gradle的--build-cache功能來加快開發(fā)周期。我們正在繼續(xù)努力來擴(kuò)展支持構(gòu)建緩存的任務(wù)集。
\\關(guān)于作者
\\Eric Wendelin是Gradle的軟件工程師,旨在讓軟件構(gòu)建更簡(jiǎn)單。
\\查看英文原文:Using Gradle build cache with Kotlin
\\感謝覃云對(duì)本文的審校。
總結(jié)
以上是生活随笔為你收集整理的在Kotlin中使用Gradle构建缓存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: abap 优化之ST05
- 下一篇: Android_Jar mismatch