命令行界面是与 Gradle 交互的主要方式

以下是执行和自定义 Gradle 命令行的参考。它也可以作为编写脚本或配置持续集成时的参考。

强烈建议使用Gradle Wrapper。在以下示例中,将 ./gradlew(在 macOS / Linux 中)或 gradlew.bat(在 Windows 中)替换为 gradle

在命令行上执行 Gradle 符合以下结构

gradle [taskName...] [--option-name...]

选项允许在任务名称之前之后

gradle [--option-name...] [taskName...]

如果指定了多个任务,则应使用空格分隔它们。

gradle [taskName1 taskName2...] [--option-name...]

接受值的选项可以带或不带 = 符号在选项和参数之间指定。建议使用 =

gradle [...] --console=plain

启用行为的选项具有带 --no- 指定反向的长格式选项。以下是相反的。

gradle [...] --build-cache
gradle [...] --no-build-cache

许多长格式选项都有短选项等效项。以下是等效的

gradle --help
gradle -h
许多命令行标志可以在 gradle.properties 中指定,以避免需要键入。有关详细信息,请参阅配置构建环境指南

命令行使用

以下各节描述了 Gradle 命令行界面的使用。

某些插件还会添加自己的命令行选项。例如,Java 测试筛选添加的 --tests。有关为自己的任务公开命令行选项的更多信息,请参阅声明命令行选项

执行任务

您可以在项目报告部分了解可用的项目和任务。

大多数构建支持一组称为生命周期任务的常用任务。其中包括 buildassemblecheck 任务。

要在根项目上执行名为 myTask 的任务,请键入

$ gradle :myTask

这将运行单个 myTask 及其所有依赖项

为任务指定选项

要将选项传递给任务,请在任务名称后加上 -- 作为选项名称的前缀

$ gradle :exampleTask --exampleOption=exampleValue

区分任务选项和内置选项

Gradle 不会阻止任务注册与 Gradle 内置选项(如 --profile--help)冲突的选项。

您可以通过在命令中的任务名称前使用 -- 分隔符来解决与 Gradle 内置选项冲突的任务选项

$ gradle [--built-in-option-name...] -- [taskName...] [--task-option-name...]

考虑一个名为 mytask 的任务,它接受一个名为 profile 的选项

  • gradle mytask --profile 中,Gradle 将 --profile 视为内置 Gradle 选项。

  • gradle -- mytask --profile=value 中,Gradle 将 --profile 作为任务选项传递。

在多项目构建中执行任务

多项目构建中,子项目任务可以使用 : 分隔子项目名称和任务名称来执行。从根项目运行时,以下是等效的

$ gradle :subproject:taskName
$ gradle subproject:taskName

您还可以使用仅包含任务名称的任务选择器所有子项目运行任务。

根项目目录调用时,以下命令会为所有子项目运行 test 任务

$ gradle test

总结一下

// Run a task in the root project only
$ gradle :exampleTask --exampleOption=exampleValue

// Run a task that may exist in the root or any subproject (ambiguous if defined in more than one)
$ gradle exampleTask --exampleOption=exampleValue

// Run a task in a specific subproject
$ gradle subproject:exampleTask --exampleOption=exampleValue
$ gradle :subproject:exampleTask --exampleOption=exampleValue
某些任务选择器,例如 helpdependencies,只会在它们被调用的项目上运行任务,而不会在所有子项目上运行。

从子项目内部调用 Gradle 时,应省略项目名称

$ cd subproject
$ gradle taskName
从子项目目录执行 Gradle Wrapper 时,请相对地引用 gradlew。例如:../gradlew taskName

执行多个任务

您还可以指定多个任务。任务的依赖项决定了精确的执行顺序,没有依赖项的任务可能会比命令行中列出的任务更早执行。

例如,以下将按命令行中列出的顺序执行 testdeploy 任务,并且还将执行每个任务的依赖项。

$ gradle test deploy

命令行顺序安全

尽管 Gradle 始终会尝试快速执行构建,但也会遵循命令行排序安全。

例如,以下将执行 cleanbuild 以及它们的依赖项

$ gradle clean build

但是,命令行顺序中暗示的意图是 clean 应该先运行,然后是 build。在 build 之后执行 clean 是不正确的,即使这样做会使构建执行得更快,因为 clean 会删除 build 创建的内容。

相反,如果命令行顺序是 build 后面跟着 clean,那么在 build 之前执行 clean 是不正确的。尽管 Gradle 会尽快执行构建,但它也会尊重命令行中指定的任务顺序的安全性,并确保在按该顺序指定时 cleanbuild 之前运行。

请注意,命令行顺序安全依赖于任务正确声明它们创建、使用或删除的内容。

从执行中排除任务

您可以使用 -x--exclude-task 命令行选项并提供要排除的任务名称来将任务从执行中排除

$ gradle dist --exclude-task test
> Task :compile
compiling source

> Task :dist
building the distribution

BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed
commandLineTutorialTasks

您可以看到 test 任务没有执行,即使 dist 任务依赖于它。test 任务的依赖项,例如 compileTest,也没有执行。其他任务所依赖的 test 的依赖项,例如 compile,仍然执行。

强制任务执行

您可以使用 --rerun-tasks 选项强制 Gradle 执行所有任务,忽略最新检查

$ gradle test --rerun-tasks

这将强制 testtest所有任务依赖项执行。它类似于运行 gradle clean test,但不会删除构建生成的输出。

或者,您可以使用 --rerun 内置任务选项告诉 Gradle 重新运行特定任务。

任务失败后继续构建

默认情况下,当任何任务失败时,Gradle 会中止执行并使构建失败。这允许构建更快完成,并防止级联故障混淆错误的根本原因。

您可以使用 --continue 选项强制 Gradle 在发生故障时执行每个任务

$ gradle test --continue

当使用 --continue 执行时,如果该任务的所有依赖项都成功完成,Gradle 会执行构建中的每个任务。

例如,如果被测试的代码中存在编译错误,则测试不会运行,因为 test 任务依赖于 compilation 任务。Gradle 会在构建结束时输出遇到的每个故障。

如果任何测试失败,许多测试套件会使整个 test 任务失败。代码覆盖率和报告工具通常在测试任务之后运行,因此“快速失败”行为可能会在这些工具运行之前停止执行。

名称缩写

在命令行上指定任务时,不必提供任务的全名。您可以提供足以唯一标识任务的任务名称的一部分。例如,gradle che 可能足以让 Gradle 识别 check 任务。

项目名称也是如此。您可以使用 gradle lib:che 命令在 library 子项目中执行 check 任务。

您可以使用驼峰式大小写模式进行更复杂的缩写。这些模式会扩展以匹配驼峰式大小写和烤肉串式大小写名称。例如,模式 foBa(或 fB)匹配 fooBarfoo-bar

更具体地说,您可以使用命令 gradle mAL:cTmy-awesome-library 子项目中运行 compileTest 任务。

$ gradle mAL:cT
> Task :my-awesome-library:compileTest
compiling unit tests

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

缩写也可以与 -x 命令行选项一起使用。

跟踪名称扩展

对于复杂的项目,预期的任务是否已执行可能会含糊不清。使用缩写名称时,单个错字可能导致执行意外的任务。

当启用 INFO 或更详细的日志记录时,输出将包含有关项目和任务名称扩展的额外信息。

例如,在前面的示例中执行 mAL:cT 命令时,将显示以下日志消息

No exact project with name ':mAL' has been found. Checking for abbreviated names.
Found exactly one project that matches the abbreviated name ':mAL': ':my-awesome-library'.
No exact task with name ':cT' has been found. Checking for abbreviated names.
Found exactly one task name, that matches the abbreviated name ':cT': ':compileTest'.

常用任务

以下是内置和大多数主要 Gradle 插件应用的约定任务。

计算所有输出

在 Gradle 构建中,build 任务通常用于指定组装所有输出和运行所有检查

$ gradle build

运行应用程序

应用程序通常使用 run 任务运行,该任务组装应用程序并执行一些脚本或二进制文件

$ gradle run

运行所有检查

通常使用 check 任务执行所有验证任务,包括测试和 linting

$ gradle check

清理输出

您可以使用 clean 任务删除构建目录的内容。这样做会导致预计算的输出丢失,从而导致后续任务执行的构建时间显著增加

$ gradle clean

项目报告

Gradle 提供了几个内置任务,这些任务显示构建的特定详细信息。这对于理解构建的结构和依赖项以及调试问题很有用。

列出项目

运行 projects 任务会为您提供所选子项目的列表,以层次结构显示

$ gradle projects

您还可以通过构建扫描获得项目报告。

列出任务

运行 gradle tasks 会为您提供所选项目的主要任务列表。此报告显示项目的默认任务(如果有)以及每个任务的描述

$ gradle tasks

默认情况下,此报告仅显示分配给任务组的任务。

在列出任务时,组(例如验证、发布、帮助、构建…)作为每个部分的标题可用

> Task :tasks

Build tasks
-----------
assemble - Assembles the outputs of this project.

Build Setup tasks
-----------------
init - Initializes a new Gradle build.

Distribution tasks
------------------
assembleDist - Assembles the main distributions

Documentation tasks
-------------------
javadoc - Generates Javadoc API documentation for the main source code.

您可以使用 --all 选项在任务列表中获取更多信息

$ gradle tasks --all

选项 --no-all 可以将报告限制为分配给任务组的任务。

如果需要更精确,您可以使用 --group 选项仅显示来自特定组的任务

$ gradle tasks --group="build setup"

显示任务使用详细信息

运行 gradle help --task someTask 会为您提供有关特定任务的详细信息

$ gradle -q help --task libs
Detailed task information for libs

Paths
     :api:libs
     :webapp:libs

Type
     Task (org.gradle.api.Task)

Options
     --rerun     Causes the task to be re-run even if up-to-date.

Description
     Builds the JAR

Group
     build

此信息包括完整的任务路径、任务类型、可能的任务特定命令行选项以及给定任务的描述。

您可以使用 --types 选项获取有关任务类类型的详细信息,或者使用 --no-types 隐藏此信息。

报告依赖项

构建扫描提供了关于哪些配置存在哪些依赖项、传递依赖项和依赖项版本选择的完整可视化报告。它们可以使用 --scan 选项调用

$ gradle myTask --scan

这将为您提供一个指向基于 Web 报告的链接,您可以在其中找到依赖项信息,如下所示

Build Scan dependencies report

列出项目依赖项

运行 dependencies 任务会为您提供所选项目的依赖项列表,按配置细分。对于每个配置,该配置的直接和传递依赖项以树状结构显示。

以下是此报告的示例

$ gradle dependencies
> Task :app:dependencies

------------------------------------------------------------
Project ':app'
------------------------------------------------------------

compileClasspath - Compile classpath for source set 'main'.
+--- project :model
|    \--- org.json:json:20220924
+--- com.google.inject:guice:5.1.0
|    +--- javax.inject:javax.inject:1
|    +--- aopalliance:aopalliance:1.0
|    \--- com.google.guava:guava:30.1-jre -> 28.2-jre
|         +--- com.google.guava:failureaccess:1.0.1
|         +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|         +--- com.google.code.findbugs:jsr305:3.0.2
|         +--- org.checkerframework:checker-qual:2.10.0 -> 3.28.0
|         +--- com.google.errorprone:error_prone_annotations:2.3.4
|         \--- com.google.j2objc:j2objc-annotations:1.3
+--- com.google.inject:guice:{strictly 5.1.0} -> 5.1.0 (c)
+--- org.json:json:{strictly 20220924} -> 20220924 (c)
+--- javax.inject:javax.inject:{strictly 1} -> 1 (c)
+--- aopalliance:aopalliance:{strictly 1.0} -> 1.0 (c)
+--- com.google.guava:guava:{strictly [28.0-jre, 28.5-jre]} -> 28.2-jre (c)
+--- com.google.guava:guava:{strictly 28.2-jre} -> 28.2-jre (c)
+--- com.google.guava:failureaccess:{strictly 1.0.1} -> 1.0.1 (c)
+--- com.google.guava:listenablefuture:{strictly 9999.0-empty-to-avoid-conflict-with-guava} -> 9999.0-empty-to-avoid-conflict-with-guava (c)
+--- com.google.code.findbugs:jsr305:{strictly 3.0.2} -> 3.0.2 (c)
+--- org.checkerframework:checker-qual:{strictly 3.28.0} -> 3.28.0 (c)
+--- com.google.errorprone:error_prone_annotations:{strictly 2.3.4} -> 2.3.4 (c)
\--- com.google.j2objc:j2objc-annotations:{strictly 1.3} -> 1.3 (c)

构建脚本和输出的具体示例可在查看和调试依赖项中找到。

运行 buildEnvironment 任务会可视化所选项目的构建脚本依赖项,类似于 gradle dependencies 如何可视化正在构建的软件的依赖项

$ gradle buildEnvironment

运行 dependencyInsight 任务会为您提供对与指定输入匹配的特定依赖项(或多个依赖项)的深入了解

$ gradle dependencyInsight --dependency [...] --configuration [...]

--configuration 参数将报告限制为特定配置,例如 compileClasspath

列出项目属性

运行 properties 任务会为您提供所选项目的属性列表

$ gradle -q api:properties
------------------------------------------------------------
Project ':api' - The shared API for the application
------------------------------------------------------------

allprojects: [project ':api']
ant: org.gradle.api.internal.project.DefaultAntBuilder@12345
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@12345
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@12345
asDynamicObject: DynamicObject for project ':api'
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@12345

您还可以使用可选的 --property 参数查询单个属性

$ gradle -q api:properties --property allprojects
------------------------------------------------------------
Project ':api' - The shared API for the application
------------------------------------------------------------

allprojects: [project ':api']

命令行补全

Gradle 通过gradle-completion(单独安装)提供 bashzsh 任务、选项和 Gradle 属性的 Tab 补全支持

gradle completion 4.0

调试选项

-?-h--help

显示带有内置 CLI 选项的帮助消息。要显示项目上下文选项,包括特定任务的帮助,请参阅 help 任务。

-v--version

打印 Gradle、Groovy、Ant、Launcher 和 Daemon JVM 以及操作系统版本信息并退出,而不执行任何任务。

-V--show-version

打印 Gradle、Groovy、Ant、Launcher 和 Daemon JVM 以及操作系统版本信息并继续执行指定任务。

-S--full-stacktrace

打印出任何异常的完整(非常详细)堆栈跟踪。另请参阅日志选项

-s--stacktrace

也打印出用户异常(例如编译错误)的堆栈跟踪。另请参阅日志选项

--scan

创建构建扫描,其中包含有关 Gradle 构建所有方面的详细信息。

-Dorg.gradle.debug=true

一个Gradle 属性,用于调试Gradle Daemon进程。Gradle 默认会在 localhost:5005 等待您附加调试器。

-Dorg.gradle.debug.host=(host address)

一个Gradle 属性,用于指定在启用调试时监听或连接的主机地址。在 Java 9 及更高版本的服务器模式下,为主机传递 * 将使服务器监听所有网络接口。默认情况下,不向 JDWP 传递主机地址,因此在 Java 9 及更高版本上使用环回地址,而早期版本监听所有接口。

-Dorg.gradle.debug.port=(port number)

一个Gradle 属性,用于指定在启用调试时监听的端口号。默认值为 5005

-Dorg.gradle.debug.server=(true,false)

一个Gradle 属性,如果设置为 true 且启用了调试,将导致 Gradle 以调试器的套接字附加模式运行构建。否则,使用套接字监听模式。默认值为 true

-Dorg.gradle.debug.suspend=(true,false)

一个Gradle 属性,如果设置为 true 且启用了调试,运行 Gradle 的 JVM 将暂停,直到附加调试器。默认值为 true

性能选项

在优化和改进构建性能时尝试这些选项。

其中许多选项可以在 gradle.properties 文件中指定,因此不需要命令行标志。

--build-cache--no-build-cache

切换Gradle 构建缓存。Gradle 将尝试重用以前构建的输出。默认关闭

--configuration-cache--no-configuration-cache

切换配置缓存。Gradle 将尝试重用以前构建的配置。默认关闭

--configuration-cache-problems=(fail,warn)

配置配置缓存如何处理问题。默认值为 fail

设置为 warn 以报告问题而不导致构建失败。

设置为 fail 以报告问题并在存在任何问题时使构建失败。

--configure-on-demand--no-configure-on-demand

切换按需配置。在此构建运行中仅配置相关项目。默认关闭

--max-workers

设置 Gradle 可能使用的最大工作线程数。默认是处理器数量

--parallel--no-parallel

并行构建项目。有关此选项的限制,请参阅并行项目执行默认关闭

--priority

指定 Gradle daemon 及其启动的所有进程的调度优先级。值是 normallow默认是 normal

--profile

layout.buildDirectory.dir("reports/profile") 目录中生成高级性能报告。首选 --scan

--scan

生成包含详细性能诊断的构建扫描。

Build Scan performance report
--watch-fs--no-watch-fs

切换监视文件系统。启用后,Gradle 会重用它在构建之间收集的文件系统信息。在 Gradle 支持此功能的操作系统上默认启用。

Gradle daemon 选项

您可以通过以下命令行选项管理Gradle Daemon

--daemon--no-daemon

使用Gradle Daemon运行构建。如果未运行或现有 daemon 忙,则启动 daemon。默认开启

--foreground

在前台进程中启动 Gradle Daemon。

--status(独立命令)

运行 gradle --status 以列出正在运行和最近停止的 Gradle daemon。它只显示相同 Gradle 版本的 daemon。

--stop(独立命令)

运行 gradle --stop 以停止所有相同版本的 Gradle Daemon。

-Dorg.gradle.daemon.idletimeout=(毫秒数)

一个Gradle 属性,其中 Gradle Daemon 将在此毫秒数空闲时间后停止自身。默认值为 10800000(3 小时)。

日志选项

设置日志级别

您可以使用以下选项自定义 Gradle 日志的详细程度,从最不详细到最详细排序。

-Dorg.gradle.logging.level=(quiet,warn,lifecycle,info,debug)

一个Gradle 属性,用于设置日志级别。

-q--quiet

仅记录错误。

-w--warn

将日志级别设置为警告。

-i--info

将日志级别设置为信息。

-d--debug

在调试模式下记录日志(包括正常堆栈跟踪)。

Lifecycle 是默认日志级别。

自定义日志格式

您可以通过以下方式指定控制台模式来控制富输出(颜色和字体变体)的使用

-Dorg.gradle.console=(auto,plain,rich,verbose)

一个Gradle 属性,用于指定控制台模式。不同模式的描述紧随其后。

--console=(auto,plain,rich,verbose)

指定要生成的控制台输出类型。

设置为 plain 以仅生成纯文本。此选项禁用控制台输出中的所有颜色和其他富输出。当 Gradle 连接到终端时,这是默认设置。

设置为 auto(默认)以在构建过程连接到控制台时启用控制台输出中的颜色和其他富输出,或者在未连接到控制台时仅生成纯文本。当 Gradle 连接到终端时,这是默认设置。

设置为 rich 以在控制台输出中启用颜色和其他富输出,无论构建进程是否连接到控制台。当未连接到控制台时,构建输出将使用 ANSI 控制字符生成富输出。

设置为 verbose 以启用颜色和其他富输出,如 rich,并在生命周期日志级别输出任务名称和结果(与 Gradle 3.5 及更早版本中默认执行的方式相同)。

报告问题

--no-problems-report

禁用 build/reports/problems-report.html 的生成,默认情况下,此报告是根据提供给问题 API 的问题生成的。

--problems-report

启用 build/reports/problems-report.html 的生成。这是默认行为。该报告是根据提供给问题 API 的问题生成的。

显示或隐藏警告

默认情况下,Gradle 不会显示所有警告(例如弃用警告)。相反,Gradle 会收集它们并在构建结束时渲染一个摘要,如下所示

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.

您可以使用以下选项控制控制台上警告的详细程度

-Dorg.gradle.warning.mode=(all,fail,none,summary)

一个Gradle 属性,用于指定警告模式。不同模式的描述紧随其后。

--warning-mode=(all,fail,none,summary)

指定如何记录警告。默认值为 summary

设置为 all 以记录所有警告。

设置为 fail 以记录所有警告并在存在任何警告时使构建失败。

设置为 summary 以抑制所有警告并在构建结束时记录摘要。

设置为 none 以抑制所有警告,包括构建结束时的摘要。

富控制台

Gradle 的富控制台在构建运行时显示额外信息。

Gradle Rich Console

功能

  • 进度条和计时器以视觉方式描述总体状态

  • 下面的并行进行中的行描述了正在发生的事情

  • 颜色和字体用于突出显示重要的输出和错误

执行选项

以下选项通过更改构建内容或依赖项的解析方式来影响构建的执行方式。

--include-build

将构建作为复合构建运行,包括指定的构建。

--offline

指定构建应不访问网络资源地运行。

-U--refresh-dependencies

刷新依赖项状态

--continue

任务失败后继续任务执行

-m--dry-run

运行 Gradle 并禁用所有任务操作。使用此选项可显示哪些任务将执行。

-t--continuous

启用持续构建。当任务文件输入更改时,Gradle 不会退出并会重新执行任务。

--write-locks

表示所有已解析的可锁定配置都应将其锁定状态持久化。

--update-locks <group:name>[,<group:name>]*

表示指定模块的版本必须在锁定文件中更新。

此标志也隐含 --write-locks

-a--no-rebuild

不重建项目依赖项。对于调试和微调 buildSrc 很有用,但可能导致错误结果。谨慎使用!

依赖验证选项

依赖验证中了解更多信息。

-F=(strict,lenient,off)--dependency-verification=(strict,lenient,off)

配置依赖验证模式

默认模式为 strict

-M--write-verification-metadata

为项目中使用的依赖项生成校验和(逗号分隔列表),用于依赖验证

--refresh-keys

刷新用于依赖验证的公钥。

--export-keys

导出用于依赖验证的公钥。

环境选项

您可以通过以下选项自定义构建脚本、设置、缓存等许多方面。

-g--gradle-user-home

指定 Gradle 用户主目录。默认是用户主目录中的 .gradle 目录。

-p--project-dir

指定 Gradle 的起始目录。默认为当前目录。

--project-cache-dir

指定项目特定的缓存目录。默认值是根项目目录中的 .gradle

-D--system-prop

设置 JVM 的系统属性,例如 -Dmyprop=myvalue

-I--init-script

指定初始化脚本

-P--project-prop

设置根项目的项目属性,例如 -Pmyprop=myvalue

-Dorg.gradle.jvmargs

一个Gradle 属性,用于设置 JVM 参数。

-Dorg.gradle.java.home

一个Gradle 属性,用于设置 JDK 主目录。

任务选项

任务可以定义任务特定的选项,这些选项与上面描述的大多数全局选项不同(这些全局选项由 Gradle 本身解释,可以出现在命令行的任何位置,并且可以使用 --help 选项列出)。

任务选项

  1. 由任务本身消费和解释;

  2. 必须在命令行中紧跟在任务之后指定;

  3. 可以使用 gradle help --task someTask 列出(参见显示任务使用详细信息)。

要了解如何为自己的任务声明命令行选项,请参阅声明和使用命令行选项

内置任务选项

内置任务选项是所有任务都可以使用的任务选项。目前,存在以下内置任务选项

--rerun

即使任务是最新的,也会导致任务重新运行。类似于 --rerun-tasks,但针对特定任务。

引导新项目

创建新的 Gradle 构建

使用内置的 gradle init 任务创建新的 Gradle 构建,可用于新项目或现有项目。

$ gradle init

大多数情况下,会指定一个项目类型。可用类型包括 basic(默认)、java-libraryjava-application 等。有关详细信息,请参阅init 插件文档

$ gradle init --type java-library

标准化和配置 Gradle

内置的 gradle wrapper 任务会生成一个脚本 gradlew,该脚本会调用指定版本的 Gradle,如果需要,还会事先下载。

$ gradle wrapper --gradle-version=8.1

除了 --gradle-version 之外,您还可以指定 --distribution-type=(bin|all)--gradle-distribution-url--gradle-distribution-sha256-sum
使用这些选项的完整详细信息在Gradle wrapper 部分中有所记录。

持续构建

持续构建允许您在文件输入更改时自动重新执行请求的任务。您可以使用 -t--continuous 命令行选项以这种模式执行构建。

持续构建中了解更多信息。