API 文档 | Task |
---|
一个 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()
方法可以返回此处列出的任何类型。其返回值会被递归转换为任务。返回null
值会被视为空集合。 - 一个 Groovy
Closure
或 Kotlin 函数。该闭包可以将一个Task
作为参数。该闭包或函数可以返回此处列出的任何类型。其返回值会被递归转换为任务。返回null
值会被视为空集合。 - 其他任何类型都会被视为错误。
一个 Task
有 4 个属性“范围”。您可以通过构建文件中的名称或调用 Task.property(java.lang.String)
方法来访问这些属性。您可以通过调用 Task.setProperty(java.lang.String, java.lang.Object)
方法来更改这些属性的值。
Task
对象本身。这包括由Task
实现类声明的任何属性 getter 和 setter。此范围的属性的可读性或可写性取决于相应 getter 和 setter 方法的存在。- 插件添加到任务的扩展。每个扩展都作为一个只读属性可用,其名称与扩展名称相同。
- 插件通过任务的
Convention
对象添加到任务的约定属性。此范围的属性可能是可读或可写的,具体取决于约定对象。 - 任务的额外属性。每个任务对象都维护一个附加属性的映射。这些是任意的 name -> value 对,可用于动态地向任务对象添加属性。一旦定义,此范围的属性即可读可写。
一个 Plugin
可以使用其 Convention
对象向 Task
添加方法。
属性 | 描述 |
actions | 将由该任务执行的 |
ant | 此任务的 |
convention | 已废弃 此任务的 |
dependsOn | 此任务的依赖项。 |
description | 此任务的描述。 |
destroyables | 此任务的可销毁资源。 |
didWork | 检查任务是否实际执行了任何工作。即使任务执行了,它也可能确定无事可做。例如,编译任务可能确定自上次运行以来源文件没有改变。 |
enabled | 返回此任务是否已启用。 |
extensions | 扩展容器。 |
finalizedBy | 返回将最终化此任务的任务。 |
group | 此任务所属的任务组。任务组在报告和用户界面中用于在向用户呈现任务列表时将相关任务分组在一起。 |
inputs | 此任务的输入项。 |
localState | 此任务的本地状态。 |
logger | 此任务的日志记录器。您可以在构建文件使用它来写入日志消息。 |
logging | 此任务的 |
mustRunAfter | 返回此任务必须在其后运行的任务。 |
name | 此任务的名称。该名称在其所属的 |
outputs | 此任务的输出项。 |
path | 任务的路径,是任务的完全限定名称。任务的路径是其所属 |
project | 此任务所属的 |
shouldRunAfter | 返回此任务应在其后运行的任务。 |
state | 此任务的执行状态。这提供有关此任务执行的信息,例如它是否已执行、是否已跳过、是否已失败等。 |
taskDependencies | 返回一个 |
temporaryDir | 返回此任务可用于写入临时文件的目录。每个任务实例都有一个单独的临时目录。不保证此目录的内容在任务执行完成后保留。 |
timeout | 此任务的超时时间。 |
方法 | 描述 |
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) | 孵化中 仅当给定的规范 (spec) 满足时才执行任务。该规范将在任务执行时评估,而不是在配置时评估。如果规范不满足,任务将被跳过。 |
onlyIf(onlyIfSpec) | 仅当给定的规范 (spec) 满足时才执行任务。该规范将在任务执行时评估,而不是在配置时评估。如果规范不满足,任务将被跳过。 |
property(propertyName) | 返回此任务指定属性的值。此方法按如下方式查找属性 |
setProperty(name, value) | 设置此任务的一个属性。此方法在以下位置搜索具有指定名称的属性,并在找到该属性的第一个位置上设置该属性。 |
shouldRunAfter(paths) | 指定此任务应在所有提供的任务之后运行。 |
usesService(service) | 注册此任务使用的 |
AntBuilder
ant
(只读)
此任务的 AntBuilder
。您可以在构建文件使用它来执行 ant 任务。
Convention
convention
(只读)
注意:此属性已废弃,并将在 Gradle 的下一个主要版本中移除。
此任务的 Convention
对象。一个 Plugin
可以使用约定对象为该任务贡献属性和方法。
String
description
此任务的描述。
TaskDestroyables
destroyables
(只读)
此任务的可销毁资源。
ExtensionContainer
extensions
(只读)
扩展容器。
TaskDependency
finalizedBy
返回将最终化此任务的任务。
String
group
此任务所属的任务组。任务组在报告和用户界面中用于在向用户呈现任务列表时将相关任务分组在一起。
TaskInputs
inputs
(只读)
此任务的输入项。
TaskLocalState
localState
(只读)
此任务的本地状态。
Logger
logger
(只读)
此任务的日志记录器。您可以在构建文件使用它来写入日志消息。
LoggingManager
logging
(只读)
此任务的 LoggingManager
,可用于接收日志和控制此任务的标准输出/错误捕获。默认情况下,System.out 被重定向到 Gradle 日志系统的 QUIET 日志级别,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 可能会有所更改。
仅当给定的规范 (spec) 满足时才执行任务。该规范将在任务执行时评估,而不是在配置时评估。如果规范不满足,任务将被跳过。
您可以添加多个此类断言。如果任何断言返回 false,则跳过该任务。
典型用法(Java)
myTask.onlyIf("run only in production environment", new Spec<Task>() { boolean isSatisfiedBy(Task task) { return isProductionEnvironment(); } });
仅当给定的规范 (spec) 满足时才执行任务。该规范将在任务执行时评估,而不是在配置时评估。如果规范不满足,任务将被跳过。
您可以添加多个此类断言。如果任何断言返回 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
的任务属性,这不是必需的。