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来为当前构建启用构建缓存。\\t
  • $PROJECT_ROOT/gradle.properties中增加org.gradle.caching=true来为整个项目启用构建缓存。\\t
  • $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\}\\

\\

推荐读物

\\

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

\\

  • Configuring the build cache\\t
  • Setting up a shared, remote build cache ⚡️\\t
  • Debugging build cache misses\\t
  • Developing cacheable custom tasks\

结论

\\

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

\\

关于作者

\\

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

\\

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

\\

感谢覃云对本文的审校。

在Kotlin中使用Gradle构建缓存相关推荐

  1. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  2. Eclipse中使用Gradle构建Java Web项目

    Gradle是一种自动化建构工具,使用DSL来声明项目设置.通过Gradle,可以对项目的依赖进行配置,并且自动下载所依赖的文件,使得构建项目的效率大大提高. 1. 安装Gradle 下载Gradle ...

  3. 01 | 使用Gradle构建多模块项目

    系列文章目录 01 | 使用Gradle构建多模块项目 02 | 架构师必备 - DDD领域驱动设计之落地实践 03 | 异常处理实践 - 抛异常+错误码 从今天开始,我将从无到有的搭建一套基于 Sp ...

  4. Android Studio Gradle构建脚本

    Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. 构建工具就是对你的项目进行 ...

  5. Android中的Gradle之配置及构建优化

    一.Gradle简介 1.Gradle是什么? Gradle是一种项目自动化构建工具,基于Groovy语言来声明项目设置,同时支持kotlin文件xxx.gradle.kts作为DSL(Domain ...

  6. gradle 构建完成自动删除_Gradle 6.6 RC6 发布,引入配置缓存特性,大幅提升构建性能

    Gradle 6.6 RC6 发布了.Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便.它 ...

  7. gradle中的增量构建

    文章目录 简介 增量构建 自定义inputs和outputs 运行时API 隐式依赖 输入校验 自定义缓存方法 输入归一化 其他使用技巧 简介 在我们使用的各种工具中,为了提升工作效率,总会使用到各种 ...

  8. Java Maven和Gradle构建的主题缓存

    Concourse CI 3.3.x引入了在任务运行之间缓存路径的功能. 此功能有助于加快将内容缓存在特定文件夹中的任务-在这里,我将演示如何使用此功能来加快基于Maven和Gradle的Java构建 ...

  9. react中使用构建缓存_如何在React中构建热图

    react中使用构建缓存 Heat maps are a great way of visualizing correlations among two data sets.  With colors ...

最新文章

  1. 贸易保护主义不能解决德国光伏企业的问题
  2. 表达式 控件 html,获取HTML表单控件的UrlEncode字符串表达式
  3. PowerDesigner的一下简单使用技巧
  4. nyoj-483--Nightmare--BFS+允许回头
  5. 16位汇编 在代码段中使用数据
  6. mysql @ $_mysql常见笔试题
  7. Pyspider爬虫实例:1号店医药电商
  8. 《高性能MySQL》第5章 创建高性能的索引
  9. Python将矩阵格式数据在Console全部显示
  10. 技术,要拿得起,更要放得下
  11. 三大开源bi工具_Superset,基于web的开源BI工具,github三万star
  12. 支持在线大数据SQL查询平台开源项目
  13. iOS应用突然无法从App Store获取到内购(IAP)产品列表的解决
  14. java 图片格式转化 wmf,emf -> svg,png
  15. 工程项目管理数字化系统建设持续推动施工企业数字化转型行稳致远
  16. vc显示html文档,VC++ 显示内存中地HTML内容
  17. Android百度鹰眼轨迹
  18. python上机练习
  19. Linux系统中的火墙策略——firewalld、iptables
  20. lumina电源维修XLB-650-25-20-R-H激光氙灯电源维修

热门文章

  1. Linux系统初始化更新(更换阿里源)(centos7mini)
  2. python - 基础算法题1- 使用while循环输入1 2 3 4 5 6 8 9 10
  3. uva 10048 Audiophobia(最小生成树)
  4. artTemplate
  5. 让Terminal显示git分支
  6. 服务器 发布 WebService 错误
  7. 三种banner基础形态
  8. [新思路]Online DVD Rental! 美国在线DVD租赁
  9. 2.Eclipse上mysql插件配置及远程连接云数据库测试
  10. JavaEE实战班第六天