API 文档 | Task |
---|
A 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 会依次执行,通过调用 Action.execute(T)
。你可以通过调用 Task.doFirst(org.gradle.api.Action)
或 Task.doLast(org.gradle.api.Action)
向任务添加 action。
Groovy 闭包也可以用于提供任务 action。当 action 执行时,将调用闭包并将任务作为参数传递。你可以通过调用 Task.doFirst(groovy.lang.Closure)
或 Task.doLast(groovy.lang.Closure)
向任务添加 action 闭包。
有 2 种特殊的异常,任务 action 可以抛出这些异常来中止执行并继续,而不会导致构建失败。任务 action 可以通过抛出 StopActionException
来中止 action 的执行并继续执行任务的下一个 action。任务 action 可以通过抛出 StopExecutionException
来中止任务的执行并继续执行下一个任务。使用这些异常允许你拥有前提条件 action,如果前提条件不成立,则可以跳过任务或任务的一部分的执行。
一个任务可能依赖于其他任务,或者可能被安排在另一个任务之后始终运行。 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
或数组。可能包含此处列出的任何类型。 iterable/collection/map/array 的元素被递归转换为任务。 - 一个
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 | 检查任务是否实际执行了任何工作。即使一个 Task 执行了,它也可能确定它无事可做。例如,一个编译任务可能会确定自上次运行任务以来,源文件没有更改。 |
enabled | 返回此任务是否已启用。 |
extensions | 扩展的容器。 |
finalizedBy | 返回最终确定此任务的任务。 |
group | 此任务所属的任务组。任务组用于报告和用户界面,以便在向用户呈现任务列表时将相关任务分组在一起。 |
inputs | 此任务的输入。 |
localState | 此任务的本地状态。 |
logger | 此任务的 logger。你可以在你的构建文件中使用它来编写日志消息。 |
logging |
|
mustRunAfter | 返回此任务必须在其之后运行的任务。 |
name | 此任务的名称。该名称在其 |
outputs | 此任务的输出。 |
path | 任务的路径,它是任务的完全限定名称。任务的路径是其 |
project | 此任务所属的 |
shouldRunAfter | 返回此任务应该在其之后运行的任务。 |
state | 此任务的执行状态。这提供了有关此任务执行的信息,例如它是否已执行、已跳过、已失败等。 |
taskDependencies | 返回一个 |
temporaryDir | 返回此任务可以用来写入临时文件的目录。每个任务实例都提供一个单独的临时目录。不能保证此目录的内容会保留到任务执行完毕之后。 |
timeout | 此任务的超时时间。 |
方法 | 描述 |
dependsOn(paths) | 向此任务添加给定的依赖项。 有关可以用作任务依赖项的对象类型的描述,请参见此处。 |
doFirst(action) | 将给定的闭包添加到此任务的 action 列表的开头。执行时,闭包将传递此任务作为参数。 |
doFirst(actionName, action) | 将给定的 |
doFirst(action) | 将给定的 |
doLast(action) | 将给定的闭包添加到此任务的 action 列表的末尾。执行时,闭包将传递此任务作为参数。 |
doLast(actionName, action) | 将给定的 |
doLast(action) | 将给定的 |
doNotTrackState(reasonNotToTrackState) | 不跟踪任务的状态。 |
finalizedBy(paths) | 为此任务添加给定的最终化器任务。 |
hasProperty(propertyName) | 确定此任务是否具有给定的属性。有关任务可用的属性的详细信息,请参见此处。 |
mustRunAfter(paths) | 指定此任务必须在所有提供的任务之后运行。 |
onlyIf(onlyIfClosure) | 仅当给定的闭包返回 true 时才执行任务。闭包将在任务执行时而不是在配置期间进行评估。闭包将传递一个参数,即此任务。如果闭包返回 false,则将跳过该任务。 |
onlyIf(onlyIfReason, onlyIfSpec) | 孵化中 仅当给定的 spec 满足时才执行任务。spec 将在任务执行时而不是在配置期间进行评估。如果 Spec 不满足,则将跳过该任务。 |
onlyIf(onlyIfSpec) | 仅当给定的 spec 满足时才执行任务。spec 将在任务执行时而不是在配置期间进行评估。如果 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
(只读)
此任务的 logger。你可以在你的构建文件中使用它来编写日志消息。
LoggingManager
logging
(只读)
LoggingManager
可以用于接收日志记录并控制此任务的标准输出/错误捕获。默认情况下,System.out 在 QUIET 日志级别重定向到 Gradle 日志记录系统,System.err 在 ERROR 日志级别重定向。
TaskDependency
mustRunAfter
返回此任务必须在其之后运行的任务。
TaskOutputs
outputs
(只读)
此任务的输出。
TaskDependency
shouldRunAfter
返回此任务应该在其之后运行的任务。
TaskState
state
(只读)
此任务的执行状态。这提供了有关此任务执行的信息,例如它是否已执行、已跳过、已失败等。
TaskDependency
taskDependencies
(只读)
返回一个 TaskDependency
,其中包含此任务依赖的所有任务。
当启用配置缓存时,不支持从任务 action 调用此方法。
File
temporaryDir
(只读)
返回此任务可以用来写入临时文件的目录。每个任务实例都提供一个单独的临时目录。不能保证此目录的内容会保留到任务执行完毕之后。
指定此任务必须在所有提供的任务之后运行。
task taskY {
mustRunAfter "taskX"
}
对于每个提供的任务,此操作都会添加任务“排序”,并且不指定任务之间的“依赖关系”。 因此,即使不先执行示例中的“taskX”,仍然可以执行“taskY”。
有关可用于指定排序关系的对象类型的描述,请参阅此处。
void
onlyIf
(Closure
<?>
onlyIfClosure)
Closure
<?>仅当给定的闭包返回 true 时才执行任务。闭包将在任务执行时而不是在配置期间进行评估。闭包将传递一个参数,即此任务。如果闭包返回 false,则将跳过该任务。
您可以添加多个此类谓词。 如果任何谓词返回 false,则会跳过该任务。
典型用法:myTask.onlyIf { isProductionEnvironment() }
注意:此方法正在孵化中,并且可能在 Gradle 的未来版本中更改。
仅当给定的 spec 满足时才执行任务。spec 将在任务执行时而不是在配置期间进行评估。如果 Spec 不满足,则将跳过该任务。
您可以添加多个此类谓词。 如果任何谓词返回 false,则会跳过该任务。
典型用法(来自 Java)
myTask.onlyIf("run only in production environment", new Spec<Task>() { boolean isSatisfiedBy(Task task) { return isProductionEnvironment(); } });
仅当给定的 spec 满足时才执行任务。spec 将在任务执行时而不是在配置期间进行评估。如果 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
的任务属性,这不是必需的。