任务

API文档:Task
已知亚型:
DefaultTask

ATask代表构建的单个原子工作,例如编译类或生成 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 }

每个任务都有一个名称(可用于引用其所属项目中的任务)和一个完全限定路径(该路径在所有项目中的所有任务中都是唯一的)。该路径是所属项目的路径和任务名称的串联。路径元素使用字符分隔:

任务操作

ATask由一系列对象组成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)

任务操作可以抛出 2 个特殊异常,以中止执行并继续执行而不会导致构建失败。任务操作可以通过抛出 来中止操作的执行并继续执行任务的下一个操作 StopActionException。任务操作可以通过抛出 来中止任务的执行并继续执行下一个任务StopExecutionException。使用这些异常允许您执行前置条件操作,如果不为 true,则跳过任务或部分任务的执行。

任务依赖性和任务排序

任务可能依赖于其他任务,或者可能被安排为始终在另一个任务之后运行。 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)用于指定任务之间的顺序。您可以使用以下任何类型的对象来指定依赖关系和顺序:

  • A StringCharSequencegroovy.lang.GString任务路径或名称。相对路径是相对于任务的Project.这允许您引用其他项目中的任务。这些任务引用不会导致任务创建。
  • A Task
  • 一个TaskDependency物体。
  • 一个TaskReference物体。
  • 一个Buildable物体。
  • 一个RegularFilePropertyDirectoryProperty
  • 一个Provider物体。可能包含此处列出的任何类型。
  • IterableCollectionMap数组。可能包含此处列出的任何类型。可迭代/集合/映射/数组的元素被递归地转换为任务。
  • A Callable。该call()方法可以返回此处列出的任何类型。它的返回值被递归地转换为任务。返回值null被视为空集合。
  • GroovyClosure或 Kotlin 函数。闭包可以采用 aTask作为参数。闭包或函数可以返回此处列出的任何类型。它的返回值被递归地转换为任务。返回值null被视为空集合。
  • 其他任何内容都将被视为错误。

在构建文件中使用任务

动态属性

ATask有 4 个属性“范围”。您可以通过构建文件中的名称或调用Task.property(java.lang.String)方法来访问这些属性。您可以通过调用该方法来更改这些属性的值Task.setProperty(java.lang.String, java.lang.Object)

  • 物体Task本身。这包括实现类声明的任何属性 getter 和 setter Task 。该作用域的属性是否可读或可写取决于是否存在相应的 getter 和 setter 方法。
  • 通过插件添加到任务的扩展。每个扩展都可以作为只读属性使用,其名称与扩展相同。
  • 通过插件添加到任务的约定属性。插件可以通过任务的对象向任务添加属性和方法Convention。该范围的属性可以是可读的或可写的,具体取决于约定对象。
  • 任务的额外属性。每个任务对象都维护一个附加属性的映射。这些是任意名称 -> 值对,您可以使用它们动态地将属性添加到任务对象。一旦定义,该范围的属性就是可读可写的。

动态方法

APlugin可以Task使用其Convention对象向 a 添加方法。

并行执行

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

特性

财产描述
actions

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

ant

对于AntBuilder这个任务。您可以在构建文件中使用它来执行 ant 任务。

convention
已弃用

Convention此任务的对象。APlugin可以使用约定对象来为此任务提供属性和方法。

dependsOn

该任务的依赖关系。

description

此任务的描述。

destroyables

此任务的可破坏物。

didWork

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

enabled

返回此任务是否启用。

extensions

扩展的容器。

finalizedBy

返回完成此任务的任务。

group

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

inputs

此任务的输入。

localState

此任务的本地状态。

logger

此任务的记录器。您可以在构建文件中使用它来写入日志消息。

logging

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

mustRunAfter

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

name

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

outputs

该任务的输出。

path

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

project

Project该任务属于哪个。

shouldRunAfter

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

state

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

taskDependencies

返回一个TaskDependency包含该任务所依赖的所有任务的a。

temporaryDir

返回此任务可用于写入临时文件的目录。每个任务实例都有一个单独的临时目录。不保证该目录的内容将在任务执行后保留。

timeout

该任务的超时时间。

方法

方法描述
dependsOn(paths)

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

doFirst(action)

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

doFirst(actionName, action)

将给定添加Action到该任务的操作列表的开头。

doFirst(action)

将给定添加Action到该任务的操作列表的开头。

doLast(action)

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

doLast(actionName, action)

将给定添加Action到该任务操作列表的末尾。

doLast(action)

将给定添加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)

注册BuildService此任务使用的 a,以便 BuildServiceRegistration.getMaxParallelUsages()可以兑现。

脚本块

无脚本块

物业详情

List<Action<? super Task>> actions

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

AntBuilder ant(只读)

对于AntBuilder这个任务。您可以在构建文件中使用它来执行 ant 任务。

Convention convention(只读)

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

Convention此任务的对象。APlugin可以使用约定对象来为此任务提供属性和方法。

Set<Object> dependsOn

该任务的依赖关系。

String description

此任务的描述。

TaskDestroyables destroyables(只读)

此任务的可破坏物。

boolean didWork

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

boolean enabled

返回此任务是否启用。

ExtensionContainer extensions(只读)

扩展的容器。

TaskDependency finalizedBy

返回完成此任务的任务。

String group

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

TaskInputs inputs(只读)

此任务的输入。

TaskLocalState localState(只读)

此任务的本地状态。

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该任务属于哪个。

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

TaskDependency shouldRunAfter

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

TaskState state(只读)

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

TaskDependency taskDependencies(只读)

返回一个TaskDependency包含该任务所依赖的所有任务的a。

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

File temporaryDir(只读)

返回此任务可用于写入临时文件的目录。每个任务实例都有一个单独的临时目录。不保证该目录的内容将在任务执行后保留。

该任务的超时时间。

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

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

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

方法详情

Task dependsOnObject...路径)

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

Task doFirstClosure行动)

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

Task doFirstString动作名称,动作)Action<? super Task>

将给定添加Action到该任务的操作列表的开头。

Task doFirst(行动)Action<? super Task>

将给定添加Action到该任务的操作列表的开头。

Task doLastClosure行动)

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

Task doLastString动作名称,动作)Action<? super Task>

将给定添加Action到该任务操作列表的末尾。

Task doLast(行动)Action<? super Task>

将给定添加Action到该任务操作列表的末尾。

void doNotTrackStateString原因不是跟踪状态)

不跟踪任务的状态。

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

Task finalizedByObject...路径)

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

task taskY {
    finalizedBy "taskX"
}

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

boolean hasPropertyString属性名称)

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

Task mustRunAfterObject...路径)

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

task taskY {
    mustRunAfter "taskX"
}

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

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

void onlyIf(Closure仅If关闭)

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

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

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

void onlyIfString仅如果原因,仅如果规格)Spec<? super Task>

注意:此方法正在孵化中,可能会在 Gradle 的未来版本中发生变化。

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

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

典型用法(来自 Java):

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

void onlyIf(仅限如果规格)Spec<? super Task>

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

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

典型用法(来自 Java):

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

Object propertyString属性名称)

返回此任务的给定属性的值。该方法按如下方式定位属性:

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

void setPropertyString名称,Object值)

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

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

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

TaskDependency shouldRunAfterObject...路径)

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

task taskY {
    shouldRunAfter "taskX"
}

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

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

void usesService(服务)Provider<? extends BuildService<?>>

注册BuildService此任务使用的 a,以便 BuildServiceRegistration.getMaxParallelUsages()可以兑现。