任务

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, CharSequencegroovy.lang.GString 任务路径或名称。相对路径是相对于任务的 Project 解释的。这允许你引用其他项目中的任务。这些任务引用不会导致任务创建。
  • 一个 Task
  • 一个 TaskDependency 对象。
  • 一个 TaskReference 对象。
  • 一个 Buildable 对象。
  • 一个 RegularFilePropertyDirectoryProperty
  • 一个 Provider 对象。可能包含此处列出的任何类型。
  • 一个 Iterable, Collection, Map 或数组。可能包含此处列出的任何类型。 iterable/collection/map/array 的元素被递归转换为任务。
  • 一个 Callablecall() 方法可以返回此处列出的任何类型。其返回值被递归转换为任务。 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 添加方法。

并行执行

默认情况下,除非任务正在等待异步工作,并且另一个(非依赖)任务已准备好执行,否则任务不会并行执行。并行执行可以通过启动构建时使用 --parallel 标志来启用。在并行模式下,不同项目(即多项目构建中)的任务能够并行执行。

属性

属性描述
actions

将由此任务执行的 Action 对象序列,按执行顺序排列。

ant

此任务的 AntBuilder。你可以在你的构建文件中使用它来执行 ant 任务。

convention
已弃用

此任务的 Convention 对象。 Plugin 可以使用约定对象为此任务贡献属性和方法。

dependsOn

此任务的依赖项。

description

此任务的描述。

destroyables

此任务的可销毁项。

didWork

检查任务是否实际执行了任何工作。即使一个 Task 执行了,它也可能确定它无事可做。例如,一个编译任务可能会确定自上次运行任务以来,源文件没有更改。

enabled

返回此任务是否已启用。

extensions

扩展的容器。

finalizedBy

返回最终确定此任务的任务。

group

此任务所属的任务组。任务组用于报告和用户界面,以便在向用户呈现任务列表时将相关任务分组在一起。

inputs

此任务的输入。

localState

此任务的本地状态。

logger

此任务的 logger。你可以在你的构建文件中使用它来编写日志消息。

logging

LoggingManager 可以用于接收日志记录并控制此任务的标准输出/错误捕获。默认情况下,System.out 在 QUIET 日志级别重定向到 Gradle 日志记录系统,System.err 在 ERROR 日志级别重定向。

mustRunAfter

返回此任务必须在其之后运行的任务。

name

此任务的名称。该名称在其 Project 中唯一标识该任务。

outputs

此任务的输出。

path

任务的路径,它是任务的完全限定名称。任务的路径是其 Project 的路径加上任务的名称,用 : 分隔。

project

此任务所属的 Project

shouldRunAfter

返回此任务应该在其之后运行的任务。

state

此任务的执行状态。这提供了有关此任务执行的信息,例如它是否已执行、已跳过、已失败等。

taskDependencies

返回一个 TaskDependency,其中包含此任务依赖的所有任务。

temporaryDir

返回此任务可以用来写入临时文件的目录。每个任务实例都提供一个单独的临时目录。不能保证此目录的内容会保留到任务执行完毕之后。

timeout

此任务的超时时间。

方法

方法描述
dependsOn(paths)

向此任务添加给定的依赖项。 有关可以用作任务依赖项的对象类型的描述,请参见此处

doFirst(action)

将给定的闭包添加到此任务的 action 列表的开头。执行时,闭包将传递此任务作为参数。

doFirst(actionName, action)

将给定的 Action 添加到此任务的 action 列表的开头。

doFirst(action)

将给定的 Action 添加到此任务的 action 列表的开头。

doLast(action)

将给定的闭包添加到此任务的 action 列表的末尾。执行时,闭包将传递此任务作为参数。

doLast(actionName, action)

将给定的 Action 添加到此任务的 action 列表的末尾。

doLast(action)

将给定的 Action 添加到此任务的 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)

注册一个 BuildService,该服务由此任务使用,以便可以遵守 BuildServiceRegistration.getMaxParallelUsages()

脚本块

没有脚本块

属性详情

List<Action<? super Task>> actions

将由此任务执行的 Action 对象序列,按执行顺序排列。

AntBuilder ant (只读)

此任务的 AntBuilder。你可以在你的构建文件中使用它来执行 ant 任务。

Convention convention (只读)

注意:此属性已弃用,将在 Gradle 的下一个主要版本中删除。

此任务的 Convention 对象。 Plugin 可以使用约定对象为此任务贡献属性和方法。

Set<Object> dependsOn

此任务的依赖项。

String description

此任务的描述。

TaskDestroyables destroyables (只读)

此任务的可销毁项。

boolean didWork

检查任务是否实际执行了任何工作。即使一个 Task 执行了,它也可能确定它无事可做。例如,一个编译任务可能会确定自上次运行任务以来,源文件没有更改。

boolean enabled

返回此任务是否已启用。

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

返回此任务必须在其之后运行的任务。

String name (只读)

此任务的名称。该名称在其 Project 中唯一标识该任务。

TaskOutputs outputs (只读)

此任务的输出。

String path (只读)

任务的路径,它是任务的完全限定名称。任务的路径是其 Project 的路径加上任务的名称,用 : 分隔。

Project project (只读)

此任务所属的 Project

当启用配置缓存时,不支持从任务 action 调用此方法。

TaskDependency shouldRunAfter

返回此任务应该在其之后运行的任务。

TaskState state (只读)

此任务的执行状态。这提供了有关此任务执行的信息,例如它是否已执行、已跳过、已失败等。

TaskDependency taskDependencies (只读)

返回一个 TaskDependency,其中包含此任务依赖的所有任务。

当启用配置缓存时,不支持从任务 action 调用此方法。

File temporaryDir (只读)

返回此任务可以用来写入临时文件的目录。每个任务实例都提供一个单独的临时目录。不能保证此目录的内容会保留到任务执行完毕之后。

此任务的超时时间。

  task myTask {
      timeout = Duration.ofMinutes(10)
  }

如果任务运行时间超过指定的时间量,则执行此任务的线程将被中断。 为了使任务能够使用此功能正常工作,它需要对中断做出反应,并且必须清理它打开的任何资源。

默认情况下,任务永不超时。

方法详情

Task dependsOn(Object... paths)

向此任务添加给定的依赖项。 有关可以用作任务依赖项的对象类型的描述,请参见此处

Task doFirst(Closure action)

将给定的闭包添加到此任务的 action 列表的开头。执行时,闭包将传递此任务作为参数。

Task doFirst(String actionName, Action<? super Task> action)

将给定的 Action 添加到此任务的 action 列表的开头。

Task doFirst(Action<? super Task> action)

将给定的 Action 添加到此任务的 action 列表的开头。

Task doLast(Closure action)

将给定的闭包添加到此任务的 action 列表的末尾。执行时,闭包将传递此任务作为参数。

Task doLast(String actionName, Action<? super Task> action)

将给定的 Action 添加到此任务的 action 列表的末尾。

Task doLast(Action<? super Task> action)

将给定的 Action 添加到此任务的 action 列表的末尾。

void doNotTrackState(String reasonNotToTrackState)

不跟踪任务的状态。

指示 Gradle 将此任务视为未跟踪任务。

Task finalizedBy(Object... paths)

为此任务添加给定的最终化器任务。

task taskY {
    finalizedBy "taskX"
}

有关可用于指定最终任务的对象类型的描述,请参阅此处

boolean hasProperty(String propertyName)

确定此任务是否具有给定的属性。有关任务可用的属性的详细信息,请参见此处

Task mustRunAfter(Object... paths)

指定此任务必须在所有提供的任务之后运行。

task taskY {
    mustRunAfter "taskX"
}

对于每个提供的任务,此操作都会添加任务“排序”,并且不指定任务之间的“依赖关系”。 因此,即使不先执行示例中的“taskX”,仍然可以执行“taskY”。

有关可用于指定排序关系的对象类型的描述,请参阅此处

void onlyIf(Closure<?> onlyIfClosure)

仅当给定的闭包返回 true 时才执行任务。闭包将在任务执行时而不是在配置期间进行评估。闭包将传递一个参数,即此任务。如果闭包返回 false,则将跳过该任务。

您可以添加多个此类谓词。 如果任何谓词返回 false,则会跳过该任务。

典型用法:myTask.onlyIf { isProductionEnvironment() }

void onlyIf(String onlyIfReason, Spec<? super Task> onlyIfSpec)

注意:此方法正在孵化中,并且可能在 Gradle 的未来版本中更改。

仅当给定的 spec 满足时才执行任务。spec 将在任务执行时而不是在配置期间进行评估。如果 Spec 不满足,则将跳过该任务。

您可以添加多个此类谓词。 如果任何谓词返回 false,则会跳过该任务。

典型用法(来自 Java)

myTask.onlyIf("run only in production environment", new Spec<Task>() {
   boolean isSatisfiedBy(Task task) {
      return isProductionEnvironment();
   }
});

void onlyIf(Spec<? super Task> onlyIfSpec)

仅当给定的 spec 满足时才执行任务。spec 将在任务执行时而不是在配置期间进行评估。如果 Spec 不满足,则将跳过该任务。

您可以添加多个此类谓词。 如果任何谓词返回 false,则会跳过该任务。

典型用法(来自 Java)

myTask.onlyIf(new Spec<Task>() {
   boolean isSatisfiedBy(Task task) {
      return isProductionEnvironment();
   }
});

Object property(String propertyName)

返回此任务的给定属性的值。此方法按以下方式查找属性

  1. 如果此任务对象具有给定名称的属性,则返回该属性的值。
  2. 如果此任务具有给定名称的扩展,则返回该扩展。
  3. 如果此任务的约定对象具有给定名称的属性,则返回该属性的值。
  4. 如果此任务具有给定名称的额外属性,则返回该属性的值。
  5. 如果未找到,则抛出 MissingPropertyException

void setProperty(String name, Object value)

设置此任务的属性。此方法在以下位置搜索具有给定名称的属性,并在找到属性的第一个位置设置该属性。

  1. 任务对象本身。 例如,enabled 项目属性。
  2. 任务的约定对象。
  3. 任务的额外属性。

如果未找到该属性,则会抛出 MissingPropertyException

TaskDependency shouldRunAfter(Object... paths)

指定此任务应在所有提供的任务之后运行。

task taskY {
    shouldRunAfter "taskX"
}

对于每个提供的任务,此操作都会添加任务“排序”,并且不指定任务之间的“依赖关系”。 因此,即使不先执行示例中的“taskX”,仍然可以执行“taskY”。

有关可用于指定排序关系的对象类型的描述,请参阅此处

void usesService(Provider<? extends BuildService<?>> service)

注册一个 BuildService,该服务由此任务使用,以便可以遵守 BuildServiceRegistration.getMaxParallelUsages()

对于声明为 ServiceReference 的任务属性,这不是必需的。