前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Gradle方式构建Kotlin缓存

使用Gradle方式构建Kotlin缓存

作者头像
xiangzhihong
发布2022-11-30 10:30:26
5800
发布2022-11-30 10:30:26
举报
文章被收录于专栏:向治洪

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

原理

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

这里写图片描述
这里写图片描述

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

这里写图片描述
这里写图片描述

示例

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

1,Clone Spek

使用以下命令clone Spek.

代码语言:javascript
复制
git clone https://github.com/spekframework/spek.git
cd spek

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

2,构建和填充缓存

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

代码语言:javascript
复制
❯ ./gradlew assemble --build-cache

BUILD SUCCESSFUL in 10s
21 actionable tasks: 21 executed

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

3,删除 / 更改构建结果

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

4, 从构建缓存中重新构建

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

代码语言:javascript
复制
❯ ./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 {}块中配置类似如下的声明:

代码语言:javascript
复制
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 中构建和运行测试时利用构建缓存。

这里写图片描述
这里写图片描述

缓存 kapt 任务

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

代码语言:javascript
复制
kapt {
useBuildCache = true
}

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

https://docs.gradle.org/current/userguide/build_cache.html#sec:build_cache_configure https://docs.gradle.org/current/userguide/build_cache.html#sec:build_cache_configure_remote https://guides.gradle.org/using-build-cache/#debugging_and_diagnosing_cache_misses https://docs.gradle.org/current/userguide/build_cache.html#sec:task_output_caching_details

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原理
  • 示例
    • 1,Clone Spek
      • 2,构建和填充缓存
        • 3,删除 / 更改构建结果
          • 4, 从构建缓存中重新构建
          • 老项目如何使用
          • 在 IntelliJ 中启用构建缓存
          • 缓存 kapt 任务
          相关产品与服务
          持续集成
          CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档