API 文档 | 任务 |
---|
一个 Task
代表构建中的一个原子工作单元,例如编译类或生成 Javadoc。
每个任务都属于一个 Project
。您可以使用 TaskContainer
上的各种方法来创建和查找任务实例。例如,TaskContainer.create(java.lang.String)
创建一个给定名称的空任务。您也可以在构建文件中使用 task
关键字。
task myTask task myTask { configure closure } task myTask(type: SomeType) task myTask(type: SomeType) { configure closure }
每个任务都有一个名称,可用于在其所属的项目中引用该任务,以及一个完全限定路径,该路径在所有项目的所有任务中都是唯一的。该路径是所属项目的路径和任务名称的连接。路径元素使用 :
字符分隔。
一个 Task
由一系列 Action
对象组成。当任务执行时,每个操作都依次通过调用 Action.execute(T)
来执行。您可以通过调用 Task.doFirst(org.gradle.api.Action)
或 Task.doLast(org.gradle.api.Action)
将操作添加到任务中。
Groovy 闭包也可以用于提供任务操作。当操作执行时,闭包将以任务作为参数调用。您可以通过调用 Task.doFirst(groovy.lang.Closure)
或 Task.doLast(groovy.lang.Closure)
将操作闭包添加到任务中。
有两种特殊异常可以由任务操作抛出,以中止执行并继续而不使构建失败。任务操作可以通过抛出 StopActionException
来中止操作的执行并继续到任务的下一个操作。任务操作可以通过抛出 StopExecutionException
来中止任务的执行并继续到下一个任务。使用这些异常可以使您拥有前置条件操作,如果条件不为真,则跳过任务的执行或任务的一部分。
一个任务可能依赖于其他任务,或者可能被安排在另一个任务之后始终运行。Gradle 确保在执行任务时,遵守所有任务依赖和排序规则,以便在所有依赖项和任何“必须在之后运行”的任务执行后,该任务才被执行。
对任务的依赖关系通过 Task.dependsOn(java.lang.Object[])
或 Task.setDependsOn(java.lang.Iterable)
控制,而 Task.mustRunAfter(java.lang.Object[])
、Task.setMustRunAfter(java.lang.Iterable)
、Task.shouldRunAfter(java.lang.Object[])
和 Task.setShouldRunAfter(java.lang.Iterable)
用于指定任务之间的排序。您可以使用以下任何类型的对象来指定依赖关系和排序:
- 一个
String
、CharSequence
或groovy.lang.GString
任务路径或名称。相对路径被解释为相对于任务的Project
。这允许您引用其他项目中的任务。这些任务引用不会导致任务创建。 - 一个
Task
。 - 一个
TaskDependency
对象。 - 一个
TaskReference
对象。 - 一个
Buildable
对象。 - 一个
RegularFileProperty
或DirectoryProperty
。 - 一个
Provider
对象。可能包含此处列出的任何类型。 - 一个
Iterable
、Collection
、Map
或数组。可能包含此处列出的任何类型。可迭代对象/集合/映射/数组的元素会递归转换为任务。 - 一个
Callable
。其call()
方法可以返回此处列出的任何类型。其返回值会递归转换为任务。空返回值被视为空集合。 - 一个 Groovy
Closure
或 Kotlin 函数。该闭包可以接受一个Task
作为参数。该闭包或函数可以返回此处列出的任何类型。其返回值会递归转换为任务。空返回值被视为空集合。 - 其他任何情况都被视为错误。
一个 Task
有 4 个属性“范围”。您可以通过名称从构建文件访问这些属性,或者通过调用 Task.property(java.lang.String)
方法。您可以通过调用 Task.setProperty(java.lang.String, java.lang.Object)
方法更改这些属性的值。
- 该
Task
对象本身。这包括由Task
实现类声明的任何属性 getter 和 setter。此范围的属性根据相应 getter 和 setter 方法的存在性可读或可写。 - 通过插件添加到任务的扩展。每个扩展都作为只读属性提供,其名称与扩展相同。
- 任务的额外属性。每个任务对象都维护一个附加属性的映射。这些是任意的名称 -> 值对,您可以使用它们动态地向任务对象添加属性。一旦定义,此范围的属性即可读写。
属性 | 描述 |
操作 | 将由该任务执行的 |
蚂蚁 | 此任务的 |
依赖于 | 此任务的依赖项。 |
描述 | 此任务的描述。 |
可销毁对象 | 此任务的可销毁项。 |
didWork | 检查任务是否实际执行了任何工作。即使任务执行,它也可能确定没有要做的事情。例如,编译任务可能确定自上次运行任务以来源文件没有更改。 |
已启用 | 返回此任务是否启用。 |
扩展 | 扩展容器。 |
finalizedBy | 返回完成此任务的任务。 |
组 | 此任务所属的任务组。任务组用于报告和用户界面中,以便在向用户呈现任务列表时,将相关任务分组在一起。 |
输入 | 此任务的输入。 |
本地状态 | 此任务的本地状态。 |
记录器 | 此任务的记录器。您可以在构建文件中使用它来写入日志消息。 |
日志 |
|
必须在之后运行 | 返回此任务必须在之后运行的任务。 |
名称 | 此任务的名称。该名称在其 |
输出 | 此任务的输出。 |
路径 | 任务的路径,这是任务的完全限定名称。任务的路径是其 |
项目 | 此任务所属的 |
应该在之后运行 | 返回此任务应该在之后运行的任务。 |
状态 | 此任务的执行状态。这提供了有关此任务执行的信息,例如它是否已执行、已跳过、已失败等。 |
任务依赖项 | 返回一个 |
临时目录 | 返回此任务可用于写入临时文件的目录。每个任务实例都提供一个单独的临时目录。不保证此目录的内容在任务执行之后会保留。 |
超时 | 此任务的超时。 |
方法 | 描述 |
dependsOn(paths) | 将给定的依赖项添加到此任务。有关可用作任务依赖项的对象的类型描述,请参阅此处。 |
doFirst(action) | 将给定的闭包添加到此任务操作列表的开头。闭包在执行时将此任务作为参数传递。 |
doFirst(actionName, action) | 将给定的 |
doFirst(action) | 将给定的 |
doLast(action) | 将给定的闭包添加到此任务操作列表的末尾。闭包在执行时将此任务作为参数传递。 |
doLast(actionName, action) | 将给定的 |
doLast(action) | 将给定的 |
doNotTrackState(reasonNotToTrackState) | 不跟踪任务的状态。 |
finalizedBy(paths) | 为此任务添加给定的最终化任务。 |
hasProperty(propertyName) | 确定此任务是否具有给定属性。有关任务可用属性的详细信息,请参阅此处。 |
mustRunAfter(paths) | 指定此任务必须在所有提供的任务之后运行。 |
onlyIf(onlyIfClosure) | 仅当给定闭包返回 true 时才执行任务。闭包将在任务执行时评估,而不是在配置期间。闭包将以此任务作为单个参数传递。如果闭包返回 false,则任务将被跳过。 |
onlyIf(onlyIfReason, onlyIfSpec) | 孵化中 仅当给定规范满足时才执行任务。该规范将在任务执行时评估,而不是在配置期间。如果规范不满足,则任务将被跳过。 |
onlyIf(onlyIfSpec) | 仅当给定规范满足时才执行任务。该规范将在任务执行时评估,而不是在配置期间。如果规范不满足,则任务将被跳过。 |
property(propertyName) | 返回此任务给定属性的值。此方法按以下方式查找属性: |
setProperty(name, value) | 设置此任务的属性。此方法在以下位置搜索具有给定名称的属性,并在找到属性的第一个位置设置该属性。 |
shouldRunAfter(paths) | 指定此任务应在所有提供的任务之后运行。 |
usesService(service) | 注册此任务使用的 |
AntBuilder
ant
(只读)
此任务的 AntBuilder
。您可以在构建文件中使用它来执行 Ant 任务。
String
description
此任务的描述。
TaskDestroyables
destroyables
(只读)
此任务的可销毁项。
ExtensionContainer
extensions
(只读)
扩展容器。
TaskDependency
finalizedBy
返回完成此任务的任务。
String
group
此任务所属的任务组。任务组用于报告和用户界面中,以便在向用户呈现任务列表时,将相关任务分组在一起。
TaskInputs
inputs
(只读)
此任务的输入。
TaskLocalState
localState
(只读)
此任务的本地状态。
Logger
logger
(只读)
此任务的记录器。您可以在构建文件中使用它来写入日志消息。
LoggingManager
logging
(只读)
LoggingManager
,可用于接收日志记录并控制此任务的标准输出/错误捕获。默认情况下,System.out 会以 QUIET 日志级别重定向到 Gradle 日志系统,System.err 会以 ERROR 日志级别重定向。
TaskDependency
mustRunAfter
返回此任务必须在之后运行的任务。
TaskOutputs
outputs
(只读)
此任务的输出。
TaskDependency
shouldRunAfter
返回此任务应该在之后运行的任务。
TaskState
state
(只读)
此任务的执行状态。这提供了有关此任务执行的信息,例如它是否已执行、已跳过、已失败等。
File
temporaryDir
(只读)
返回此任务可用于写入临时文件的目录。每个任务实例都提供一个单独的临时目录。不保证此目录的内容在任务执行之后会保留。
指定此任务必须在所有提供的任务之后运行。
task taskY {
mustRunAfter "taskX"
}
对于每个提供的任务,此操作添加一个任务“排序”,但不指定任务之间的“依赖关系”。因此,在示例中仍然可以在不先执行“taskX”的情况下执行“taskY”。
有关可用作指定排序关系的对象类型描述,请参阅此处。
void
onlyIf
(Closure
<?>
onlyIfClosure)
Closure
<?>仅当给定闭包返回 true 时才执行任务。闭包将在任务执行时评估,而不是在配置期间。闭包将以此任务作为单个参数传递。如果闭包返回 false,则任务将被跳过。
您可以添加多个此类谓词。如果任何谓词返回 false,则任务将被跳过。
典型用法:myTask.onlyIf { isProductionEnvironment() }
注意:此方法处于孵化中,可能会在 Gradle 的未来版本中更改。
仅当给定规范满足时才执行任务。该规范将在任务执行时评估,而不是在配置期间。如果规范不满足,则任务将被跳过。
您可以添加多个此类谓词。如果任何谓词返回 false,则任务将被跳过。
典型用法(来自 Java)
myTask.onlyIf("run only in production environment", new Spec<Task>() { boolean isSatisfiedBy(Task task) { return isProductionEnvironment(); } });
仅当给定规范满足时才执行任务。该规范将在任务执行时评估,而不是在配置期间。如果规范不满足,则任务将被跳过。
您可以添加多个此类谓词。如果任何谓词返回 false,则任务将被跳过。
典型用法(来自 Java)
myTask.onlyIf(new Spec<Task>() { boolean isSatisfiedBy(Task task) { return isProductionEnvironment(); } });
返回此任务给定属性的值。此方法按以下方式查找属性:
- 如果此任务对象具有给定名称的属性,则返回该属性的值。
- 如果此任务具有给定名称的扩展,则返回该扩展。
- 如果此任务具有给定名称的额外属性,则返回该属性的值。
- 如果未找到,则抛出
MissingPropertyException
设置此任务的属性。此方法在以下位置搜索具有给定名称的属性,并在找到属性的第一个位置设置该属性。
- 任务对象本身。例如,
enabled
项目属性。 - 任务的额外属性。
如果未找到该属性,则抛出 MissingPropertyException
。
TaskDependency
shouldRunAfter
(Object
...
paths)
Object
...指定此任务应在所有提供的任务之后运行。
task taskY {
shouldRunAfter "taskX"
}
对于每个提供的任务,此操作添加一个任务“排序”,但不指定任务之间的“依赖关系”。因此,在示例中仍然可以在不先执行“taskX”的情况下执行“taskY”。
有关可用作指定排序关系的对象类型描述,请参阅此处。
void
usesService
(Provider
<? extends BuildService
<?>>
service)
Provider
<? extends BuildService
<?>>注册此任务使用的 BuildService
,以便可以遵守 BuildServiceRegistration.getMaxParallelUsages()
。
对于声明为 ServiceReference
的任务属性,这是不必要的。