命令行界面是与 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
和 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(单独安装)提供 bash
和 zsh
任务、选项和 Gradle 属性的 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=(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 及其启动的所有进程的调度优先级。值是
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。默认开启。
--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 及更早版本中默认执行的方式相同)。
显示或隐藏警告
默认情况下,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
很有用,但可能导致错误结果。谨慎使用!
环境选项
您可以通过以下选项自定义构建脚本、设置、缓存等许多方面。
-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 部分中有所记录。