命令行界面是与 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 命令行界面的使用方法。
执行任务
您可以在项目报告部分了解哪些项目和任务可用。
大多数构建支持一组称为生命周期任务的通用任务。这些任务包括 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
回顾总结:
// 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
一些任务选择器,如 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
及其所有任务依赖项。这类似于运行 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 提供了几个内置任务,用于显示构建的特定详细信息。这有助于理解构建结构和依赖项,以及调试问题。
列出任务
运行 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
隐藏此信息。
报告依赖项
构建扫描 (Build Scans) 提供了一个完整、可视化的报告,说明在哪些配置上存在哪些依赖项、传递性依赖项以及依赖项版本选择。可以使用 --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
-
创建一个构建扫描 (Build Scan),其中包含有关 Gradle 构建所有方面的详细信息。
-Dorg.gradle.debug=true
-
一个用于调试Gradle Daemon 进程的Gradle 属性。默认情况下,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 在调试器的 socket-attach 模式下运行构建。否则,使用 socket-listen 模式。默认值为true
。 -Dorg.gradle.debug.suspend=(true,false)
-
一个Gradle 属性,如果设置为
true
且启用了调试,运行 Gradle 的 JVM 将暂停,直到附加调试器。默认值为true
。 -Dorg.gradle.daemon.debug=true
-
一个用于调试Gradle Daemon 进程的Gradle 属性。(与
-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 运行构建。如果 daemon 未运行或现有 daemon 正忙,则启动 daemon。默认为开启。
--foreground
-
在前台进程中启动 Gradle Daemon。
--status
(独立命令)-
运行
gradle --status
以列出正在运行和最近停止的 Gradle daemon。它仅显示相同 Gradle 版本的 daemon。 --stop
(独立命令)-
运行
gradle --stop
以停止所有相同版本的 Gradle Daemon。 -Dorg.gradle.daemon.idletimeout=(number of milliseconds)
-
一个Gradle 属性,用于设置 Gradle Daemon 在空闲此毫秒数后自行停止。默认为 10800000(3 小时)。
日志选项
设置日志级别
您可以使用以下选项自定义 Gradle 日志记录的详细程度,这些选项按从最不详细到最详细的顺序排列。
-Dorg.gradle.logging.level=(quiet,warn,lifecycle,info,debug)
-
一个Gradle 属性,用于设置日志级别。
-q
,--quiet
-
仅记录错误。
-w
,--warn
-
将日志级别设置为 warn。
-i
,--info
-
将日志级别设置为 info。
-d
,--debug
-
在 debug 模式下记录(包括正常堆栈跟踪)。
Lifecycle 是默认日志级别。
自定义日志格式
您可以通过以下方式指定控制台模式来控制富文本输出(颜色和字体变体)的使用:
-Dorg.gradle.console=(auto,plain,rich,verbose)
-
一个Gradle 属性,用于指定控制台模式。不同模式的描述紧随其后。
--console=(auto,plain,rich,verbose)
-
指定要生成的控制台输出类型。
设置为
plain
以仅生成纯文本。此选项禁用控制台输出中的所有颜色和其他富文本输出。当 Gradle 未连接到终端时,这是默认设置。设置为
auto
(默认)以在构建过程连接到控制台时启用控制台输出中的颜色和其他富文本输出,或在未连接到控制台时仅生成纯文本。当 Gradle 连接到终端时,这是默认设置。设置为
rich
以在控制台输出中启用颜色和其他富文本输出,无论构建过程是否连接到控制台。未连接到控制台时,构建输出将使用 ANSI 控制字符生成富文本输出。设置为
verbose
以启用颜色和其他类似rich
的富文本输出,并在 lifecycle 日志级别输出任务名称和结果(这在 Gradle 3.5 及更早版本中是默认行为)。
报告问题
--no-problems-report
-
禁用生成
build/reports/problems-report.html
,默认情况下,此报告由提供给问题 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 部分。