在Kotlin中使用Gradle構建緩衝

來源:互聯網
上載者:User

在Kotlin中使用Gradle構建緩衝

Kotlin 1.2.21允許Kotlin項目使用構建緩衝。通過Gradle的構建緩衝功能,可以提升Kotlin代碼的編譯速度,加快開發週期。本文將結合實際例子,介紹利用Gradle加速Kotlin代碼編譯的原理、配置樣本以及在IDE中的使用方法。

構建緩衝允許Gradle可以複用任何之前調用(包括那些來自其它機器的調用)的任務產出。Kotlin 1.2.21允許Kotlin項目使用構建緩衝。

構建緩衝的工作原理是在緩衝中儲存編譯過的類、測試結果和其它構建工序,同時記錄所有的任務輸入,包括輸入檔案內容、相關的類路徑和任務配置。

這常常導致更快的構建。下面的表徵圖展示了在Gradle的持續整合中使用構建緩衝和不使用構建緩衝所收集到的構建時間:

本文中,我們將向你闡述,如何使用Gradle的構建緩衝來避免不必要的Kotlin編譯,從而加快你的構建過程。

Spek快速樣本

你現在就可以嘗試使用Gradle的構建緩衝。只需要遵循下面幾個步驟:

Clone Spek 

git clone https://github.com/spekframework/spek.git
cd spek

Spek 2.x分支(其預設分支)已經有我們後續要介紹的構建緩衝的所有先決條件。

構建和填充緩衝

下面的命令會構建Spek並填充本地構建緩衝。

❯ ./gradlew assemble --build-cache

BUILD SUCCESSFUL in 10s
21 actionable tasks: 21 executed

使用--build-cache標識,可以讓Gradle在一個獨立的任務結果緩衝中儲存任務結果。

刪除/更改構建結果

這類比了在另一台機器上的情況或者做了一次改變並stash(儲存)這次改變的情況。示範的最快方法是使用clean任務。

❯ ./gradlew clean

從構建緩衝中重新構建

當我們重新構建時,從構建緩衝中拉取所有編譯過的Kotlin源碼。

❯ ./gradlew assemble --build-cache

BUILD SUCCESSFUL in 2s
21 actionable tasks: 11 executed, 10 from cache

就是這樣!通過使用Gradle的構建緩衝,你重用了編譯過的Kotlin類,而不是又重新編譯!構建速度差不多快了5倍

你可以從這次構建觀測中看到,Kotlin編譯任務從構建緩衝中拉取緩衝結果;而:jar:processResources任務沒有從緩衝中拉取,因為它們本地產生JAR包和複製檔案的速度比從緩衝中拉取緩衝結果的速度更快。另外Gradle構建緩衝也支援緩衝:test任務。

當持續整合的一個執行個體填充了一個共用的構建緩衝(開發人員可以從中拉取)時,Gradle構建緩衝會特別有效。下文羅列了實現這點的更多資源的連結。

為你的項目啟用構建緩衝

我希望你會在自己的項目上嘗試使用構建緩衝——你可以遵循下面的步驟來啟用構建緩衝。

首先,你需要確保正在使用Gradle 4.3或者更高版本,這樣才能選擇Kotlin Gradle Plugin來使用新的Gradle APIs。你可以方便地使用Gradle wrapper升級Gradle。

然後,你需要確保正在使用Kotlin 1.2.20或更高版本來進行編譯。你在自己的構建指令碼build.gradle中的buildscript {}塊中配置類似如下的聲明:

dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.21"
}

然後,我們需要讓Gradle使用構建緩衝。有3種啟用構建緩衝的方法:

  • 在命令列中使用--build-cache來為當前構建啟用構建緩衝。
  • 在$PROJECT_ROOT/gradle.properties中增加org.gradle.caching=true來為整個項目啟用構建緩衝。
  • 在$GRADLE_HOME/gradle.properties中增加org.gradle.caching=true來為目前使用者的所有構建啟用構建緩衝。

注意: Android開發人員即使設定了android.enableBuildCache=true,也仍需要按照上述方法啟用構建緩衝,因為Gradle的構建緩衝是獨立於Android的構建緩衝的。

我們可以選擇通過將run和test actions委派給Gradle的方式,來利用IDE的構建緩衝。

在IntelliJ中啟用構建緩衝

如果你使用IntelliJ來執行Gradle actions,你需要在IDE配置中勾選“Delegate IDE build/run actions to Gradle(將IDE 構建/運行動作委派給Gradle)”,從而在IntelliJ中構建和運行測試時利用構建緩衝。

注意: Android Studio預設這樣做。

緩衝kapt任務

目前即使使用--build-cache,針對kapt的緩衝也預設是禁用的,因為Gradle還沒有一種方法來映射註解處理器的輸入和輸出。你可以通過在kapt配置中將useBuildCache設定為true來明確啟用針對Kotlin註解處理任務的構建緩衝。

 kapt {
useBuildCache = true
}

推薦讀物

你可以通過下列資源來瞭解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.