在Kotlin中使用Gradle构建缓存

使用Kotlin 1.2.21及以上的版本,可通过Gradle的构建缓存功能显著提升编译速度。本文介绍如何配置及利用该功能,通过实际案例展示如何减少重复编译,加快开发周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kotlin 1.2.21允许Kotlin项目使用构建缓存。通过Gradle的构建缓存功能,可以提升Kotlin代码的编译速度,加快开发周期。本文将结合实际例子,介绍利用Gradle加速Kotlin代码编译的原理、配置示例以及在IDE中的使用方法。

\u0026#xD;\u0026#xD;

构建缓存允许Gradle可以复用任何之前调用(包括那些来自其它机器的调用)的任务产出。Kotlin 1.2.21允许Kotlin项目使用构建缓存。

\u0026#xD;\u0026#xD;

构建缓存的工作原理是在缓存中存储编译过的类、测试结果和其它构建工序,同时记录所有的任务输入,包括输入文件内容、相关的类路径和任务配置。

\u0026#xD;\u0026#xD;

651eaeb8bb5c0ac463e92ea4b2f733b5.png

\u0026#xD;\u0026#xD;

这常常导致更快的构建。下面的图标展示了在Gradle的持续集成中使用构建缓存和不使用构建缓存所收集到的构建时间:

\u0026#xD;\u0026#xD;

d24856a82450dc33746f5dff9d422c90.png

\u0026#xD;\u0026#xD;

本文中,我们将向你阐述,如何使用Gradle的构建缓存来避免不必要的Kotlin编译,从而加快你的构建过程。

\u0026#xD;\u0026#xD;

Spek快速示例

\u0026#xD;\u0026#xD;

你现在就可以尝试使用Gradle的构建缓存。只需要遵循下面几个步骤:

\u0026#xD;\u0026#xD;

Clone Spek 

\u0026#xD;\u0026#xD;
\u0026#xD;git clone https://github.com/spekframework/spek.git\u0026#xD;cd spek
\u0026#xD;\u0026#xD;

Spek 2.x分支(其默认分支)已经有我们后续要介绍的构建缓存的所有先决条件

\u0026#xD;\u0026#xD;

构建和填充缓存

\u0026#xD;\u0026#xD;

下面的命令会构建Spek并填充本地构建缓存。

\u0026#xD;\u0026#xD;
\u0026#xD;❯ ./gradlew assemble --build-cache\u0026#xD;\u0026#xD;BUILD SUCCESSFUL in 10s\u0026#xD;21 actionable tasks: 21 executed
\u0026#xD;\u0026#xD;

使用--build-cache标识,可以让Gradle在一个独立的任务结果缓存中存储任务结果。

\u0026#xD;\u0026#xD;

删除/更改构建结果

\u0026#xD;\u0026#xD;

这模拟了在另一台机器上的情况或者做了一次改变并stash(存储)这次改变的情况。演示的最快方法是使用clean任务。

\u0026#xD;\u0026#xD;
\u0026#xD;❯ ./gradlew clean\u0026#xD;\u0026#xD;
\u0026#xD;\u0026#xD;

从构建缓存中重新构建

\u0026#xD;\u0026#xD;

当我们重新构建时,从构建缓存中拉取所有编译过的Kotlin源码。

\u0026#xD;\u0026#xD;
\u0026#xD;❯ ./gradlew assemble --build-cache\u0026#xD;\u0026#xD;BUILD SUCCESSFUL in 2s\u0026#xD;21 actionable tasks: 11 executed, 10 from cache\u0026#xD;\u0026#xD;
\u0026#xD;\u0026#xD;

就是这样!通过使用Gradle的构建缓存,你重用了编译过的Kotlin类,而不是又重新编译!构建速度差不多快了5倍

\u0026#xD;\u0026#xD;

你可以从这次构建观测中看到,Kotlin编译任务从构建缓存中拉取缓存结果;而:jar:processResources任务没有从缓存中拉取,因为它们本地生成JAR包和复制文件的速度比从缓存中拉取缓存结果的速度更快。另外Gradle构建缓存也支持缓存:test任务。

\u0026#xD;\u0026#xD;

当持续集成的一个实例填充了一个共享的构建缓存(开发者可以从中拉取)时,Gradle构建缓存会特别有效。下文罗列了实现这点的更多资源的链接

\u0026#xD;\u0026#xD;

为你的项目启用构建缓存

\u0026#xD;\u0026#xD;

我希望你会在自己的项目上尝试使用构建缓存——你可以遵循下面的步骤来启用构建缓存。

\u0026#xD;\u0026#xD;

首先,你需要确保正在使用Gradle 4.3或者更高版本,这样才能选择Kotlin Gradle Plugin来使用新的Gradle APIs。你可以方便地使用Gradle wrapper升级Gradle。

\u0026#xD;\u0026#xD;

然后,你需要确保正在使用Kotlin 1.2.20或更高版本来进行编译。你在自己的构建脚本build.gradle中的buildscript {}块中配置类似如下的声明:

\u0026#xD;\u0026#xD;
\u0026#xD;dependencies {\u0026#xD;    classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.21\"\u0026#xD;}\u0026#xD;\u0026#xD;
\u0026#xD;\u0026#xD;

然后,我们需要让Gradle使用构建缓存。有3种启用构建缓存的方法:

\u0026#xD;\u0026#xD;
  • 在命令行中使用--build-cache来为当前构建启用构建缓存。\u0026#xD;\t
  • $PROJECT_ROOT/gradle.properties中增加org.gradle.caching=true来为整个项目启用构建缓存。\u0026#xD;\t
  • $GRADLE_HOME/gradle.properties中增加org.gradle.caching=true来为当前用户的所有构建启用构建缓存。\u0026#xD;

注意: Android开发者即使设置了android.enableBuildCache=true,也仍需要按照上述方法启用构建缓存,因为Gradle的构建缓存是独立于Android的构建缓存的。

\u0026#xD;\u0026#xD;

我们可以选择通过将run和test actions委派给Gradle的方式,来利用IDE的构建缓存。

\u0026#xD;\u0026#xD;

在IntelliJ中启用构建缓存

\u0026#xD;\u0026#xD;

如果你使用IntelliJ来执行Gradle actions,你需要在IDE配置中勾选“Delegate IDE build/run actions to Gradle(将IDE 构建/运行动作委派给Gradle)”,从而在IntelliJ中构建和运行测试时利用构建缓存。

\u0026#xD;\u0026#xD;

d91fe92015d07b33f2cc95cafa700c6e.png

\u0026#xD;\u0026#xD;

注意: Android Studio默认这样做。

\u0026#xD;\u0026#xD;

缓存kapt任务

\u0026#xD;\u0026#xD;

目前即使使用--build-cache,针对kapt的缓存也默认是禁用的,因为Gradle还没有一种方法来映射注解处理器的输入和输出。你可以通过在kapt配置中将useBuildCache设置为true来明确启用针对Kotlin注解处理任务的构建缓存。

\u0026#xD;\u0026#xD;
\u0026#xD;kapt {\u0026#xD;useBuildCache = true\u0026#xD;}\u0026#xD;\u0026#xD;
\u0026#xD;\u0026#xD;

推荐读物

\u0026#xD;\u0026#xD;

你可以通过下列资源来了解更多关于利用Gradle构建缓存的信息:

\u0026#xD;\u0026#xD;

结论

\u0026#xD;\u0026#xD;

使用kotlin-gradle-plugin 1.2.20及以上版本编译Kotlin代码,可以利用Gradle的--build-cache功能来加快开发周期。我们正在继续努力来扩展支持构建缓存的任务集。

\u0026#xD;\u0026#xD;

关于作者

\u0026#xD;\u0026#xD;

Eric Wendelin是Gradle的软件工程师,旨在让软件构建更简单。

\u0026#xD;\u0026#xD;

查看英文原文:Using Gradle build cache with Kotlin

\u0026#xD;\u0026#xD;

感谢覃云对本文的审校。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值