Gradle 使用两个主要功能来减少构建时间:增量构建构建缓存

gradle basic 8

增量构建

增量构建是一种构建,它避免运行自上次构建以来其输入未发生更改的任务。如果这些任务只会重新生成相同输出,则重新执行这些任务是不必要的。

要使增量构建正常工作,任务必须定义其输入和输出。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 构建,因为不会浪费周期重新构建不受新代码更改影响的二进制文件。

请参阅 构建缓存章节 以了解更多信息。

下一步: 了解构建扫描 >>