命令行界面是与 Gradle 交互的主要方法。
以下是执行和自定义 Gradle 命令行界面的参考。它也可以作为编写脚本或配置持续集成时的参考。
强烈建议使用 Gradle Wrapper。在以下示例中,将 gradle
替换为 ./gradlew
(在 macOS / Linux 中)或 gradlew.bat
(在 Windows 中)。
在命令行中执行 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 命令行界面的使用。
执行任务
您可以在项目报告部分中了解有关项目中可用的项目和任务的信息。
大多数构建都支持一组通用的任务,称为生命周期任务。这些任务包括 build
、assemble
和 check
任务。
要在根项目上执行名为 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
某些任务选择器(如 help 或 dependencies )仅在调用它们的项目上运行任务,而不是在所有子项目上运行。 |
从子项目内部调用 Gradle 时,应省略项目名称
$ cd subproject
$ gradle taskName
从子项目目录执行 Gradle Wrapper 时,请相对引用 gradlew 。例如:../gradlew taskName 。 |
执行多个任务
您还可以指定多个任务。任务的依赖项确定了精确的执行顺序,并且没有依赖项的任务可能会比在命令行中列出的任务更早执行。
例如,以下命令将按照命令行中列出的顺序执行 test
和 deploy
任务,并且还将执行每个任务的依赖项。
$ gradle test deploy
命令行顺序安全
尽管 Gradle 始终会尝试快速执行构建,但命令行顺序安全也会得到遵守。
例如,以下命令将执行 clean
和 build
及其依赖项
$ gradle clean build
但是,命令行顺序中隐含的意图是 clean
应该首先运行,然后是 build
。即使这样做会使构建执行得更快,但在 build
之后执行 clean
也是不正确的,因为 clean
会删除 build
创建的内容。
相反,如果命令行顺序是 build
,然后是 clean
,则在 build
之前执行 clean
是不正确的。尽管 Gradle 会尽可能快地执行构建,但它也会尊重命令行上指定的任务顺序的安全性,并确保在按该顺序指定时,clean
在 build
之前运行。
请注意,命令行顺序安全依赖于任务正确声明它们创建、使用或删除的内容。
从执行中排除任务
您可以使用 -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

您可以看到 test
任务未执行,即使 dist
任务依赖于它。test
任务的依赖项(如 compileTest
)也未执行。其他任务依赖的 test
的依赖项(如 compile
)仍然执行。
强制任务执行
您可以使用 --rerun-tasks
选项强制 Gradle 执行所有任务,忽略最新的检查
$ gradle test --rerun-tasks
这将强制 test
和 test
的所有任务依赖项执行。它类似于运行 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
任务。
更具体地说,您可以使用命令 gradle mAL:cT
在 my-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 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 的报告的链接,您可以在其中找到像这样的依赖项信息

列出项目依赖项
运行 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(单独安装)为任务、选项和 Gradle 属性提供 bash
和 zsh
Tab 补全支持

调试选项
-?
、-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=(主机地址)
-
一个 Gradle 属性,用于指定启用调试时要侦听或连接的主机地址。在 Java 9 及更高版本上的服务器模式下,为主机传递
*
将使服务器侦听所有网络接口。默认情况下,没有主机地址传递给 JDWP,因此在 Java 9 及更高版本上,使用环回地址,而早期版本侦听所有接口。 -Dorg.gradle.debug.port=(端口号)
-
一个 Gradle 属性,用于指定启用调试时要侦听的端口号。默认为
5005
。 -Dorg.gradle.debug.server=(true,false)
-
一个 Gradle 属性,如果设置为
true
并且启用了调试,将导致 Gradle 在调试器的套接字附加模式下运行构建。否则,将使用套接字侦听模式。默认为true
。 -Dorg.gradle.debug.suspend=(true,false)
-
一个 Gradle 属性,如果设置为
true
并且启用了调试,则运行 Gradle 的 JVM 将暂停,直到附加调试器。默认为true
。 -Dorg.gradle.daemon.debug=true
-
一个 Gradle 属性,用于调试 Gradle Daemon 进程。(与
-Dorg.gradle.debug
重复)
性能选项
在优化和改进构建性能时,请尝试这些选项。
这些选项中的许多选项都可以在 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 及其启动的所有进程的调度优先级。值可以是
normal
或low
。默认为 normal。 --profile
-
在
layout.buildDirectory.dir("reports/profile")
目录中生成高级性能报告。首选--scan
。 --scan
-
生成包含详细性能诊断的构建扫描。

--watch-fs
、--no-watch-fs
-
切换监视文件系统。启用后,Gradle 会重用它在构建之间收集的有关文件系统的信息。在 Gradle 支持此功能的操作系统上默认启用。
Gradle Daemon 选项
您可以通过以下命令行选项管理 Gradle Daemon。
--daemon
、--no-daemon
-
使用 Gradle Daemon 运行构建。如果守护进程未运行或现有守护进程繁忙,则启动守护进程。默认为开启。
--foreground
-
在前台进程中启动 Gradle Daemon。
--status
(独立命令)-
运行
gradle --status
以列出正在运行和最近停止的 Gradle 守护进程。它仅显示相同 Gradle 版本的守护进程。 --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
,默认情况下,此报告是使用提供给Problems API的问题生成的。 --problems-report
-
启用生成
build/reports/problems-report.html
。这是默认行为。该报告是使用提供给Problems 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
以抑制所有警告,包括构建结束时的摘要。
执行选项
以下选项通过更改构建内容或依赖项解析方式来影响构建的执行方式。
--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
很有用,但可能导致错误的结果。谨慎使用!
环境选项
您可以通过以下选项自定义构建脚本、设置、缓存等等的许多方面。
-b
,--build-file
(已弃用)-
指定构建文件。例如:
gradle --build-file=foo.gradle
。默认值为build.gradle
,然后是build.gradle.kts
。 -c
,--settings-file
(已弃用)-
指定设置文件。例如:
gradle --settings-file=somewhere/else/settings.gradle
-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
选项列出)。
任务选项
-
由任务本身使用和解释;
-
必须在命令行中的任务之后立即指定;
-
可以使用
gradle help --task someTask
列出(请参阅显示任务用法详情)。
要了解如何为自己的任务声明命令行选项,请参阅声明和使用命令行选项。
引导新项目
创建新的 Gradle 构建
使用内置的 gradle init
任务来创建新的 Gradle 构建,包括新的或现有的项目。
$ gradle init
大多数情况下,会指定项目类型。可用类型包括 basic
(默认)、java-library
、java-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 部分。