增量构建
增量构建是一种构建,它避免运行自上次构建以来输入未更改的任务。如果这些任务只会重新生成相同的输出,则无需重新执行它们。
要使增量构建起作用,任务必须定义其输入和输出。Gradle 会在构建时确定这些输入或输出是否已更改。如果已更改,Gradle 将执行该任务。否则,它将跳过执行。
增量构建始终启用,查看它们工作原理的最佳方法是开启详细模式。在详细模式下,构建期间每个任务状态都会被标记
$ ./gradlew compileJava --console=verbose
> Task :buildSrc:generateExternalPluginSpecBuilders UP-TO-DATE
> Task :buildSrc:extractPrecompiledScriptPluginPlugins UP-TO-DATE
> Task :buildSrc:compilePluginsBlocks UP-TO-DATE
> Task :buildSrc:generatePrecompiledScriptPluginAccessors UP-TO-DATE
> Task :buildSrc:generateScriptPluginAdapters UP-TO-DATE
> Task :buildSrc:compileKotlin UP-TO-DATE
> Task :buildSrc:compileJava NO-SOURCE
> Task :buildSrc:compileGroovy NO-SOURCE
> Task :buildSrc:pluginDescriptors UP-TO-DATE
> Task :buildSrc:processResources UP-TO-DATE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Task :list:compileJava UP-TO-DATE
> Task :utilities:compileJava UP-TO-DATE
> Task :app:compileJava UP-TO-DATE
BUILD SUCCESSFUL in 374ms
12 actionable tasks: 12 up-to-date
当你运行一个之前执行过且未更改的任务时,任务旁边会打印 UP-TO-DATE
。
要永久启用详细模式,请将 org.gradle.console=verbose 添加到你的 gradle.properties 文件中。 |
构建缓存
增量构建是一个很棒的优化,有助于避免重复工作。如果开发人员持续更改单个文件,很可能无需重建项目中的所有其他文件。
然而,当同一个开发人员切换到上周创建的新分支时会发生什么?即使开发人员正在构建之前已经构建过的东西,文件仍然会被重建。
这就是构建缓存发挥作用的地方。
构建缓存存储先前的构建结果并在需要时恢复它们。它防止了执行耗时且昂贵过程的重复工作和成本。
当使用构建缓存重新填充本地目录时,任务会被标记为 FROM-CACHE
$ ./gradlew compileJava --build-cache
> Task :buildSrc:generateExternalPluginSpecBuilders UP-TO-DATE
> Task :buildSrc:extractPrecompiledScriptPluginPlugins UP-TO-DATE
> Task :buildSrc:compilePluginsBlocks UP-TO-DATE
> Task :buildSrc:generatePrecompiledScriptPluginAccessors UP-TO-DATE
> Task :buildSrc:generateScriptPluginAdapters UP-TO-DATE
> Task :buildSrc:compileKotlin UP-TO-DATE
> Task :buildSrc:compileJava NO-SOURCE
> Task :buildSrc:compileGroovy NO-SOURCE
> Task :buildSrc:pluginDescriptors UP-TO-DATE
> Task :buildSrc:processResources UP-TO-DATE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Task :list:compileJava FROM-CACHE
> Task :utilities:compileJava FROM-CACHE
> Task :app:compileJava FROM-CACHE
BUILD SUCCESSFUL in 364ms
12 actionable tasks: 3 from cache, 9 up-to-date
本地目录重新填充后,下一次执行会将任务标记为 UP-TO-DATE
,而不是 FROM-CACHE
。
构建缓存允许你跨团队共享和重用未更改的构建和测试输出。这加速了本地和 CI 构建,因为不会浪费循环来重新构建不受新代码更改影响的二进制文件。
你可以查阅构建缓存章节以了解更多信息。
下一步: 了解构建扫描 >>