首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Gradle task的doFirst()不是首先执行,而是在任务完成之后执行

Gradle是一种基于Groovy语言的构建工具,用于自动化构建、测试和部署软件项目。Gradle task是Gradle构建脚本中的一个任务,可以执行一系列的操作,例如编译代码、运行测试、打包应用等。

在Gradle中,每个task都可以定义一个或多个动作(Action),这些动作会按照定义的顺序依次执行。其中,doFirst()是task对象的一个方法,用于在任务开始执行之前添加一个动作。但是需要注意的是,doFirst()添加的动作并不是首先执行的,而是在任务完成之后执行。

这是因为Gradle的任务执行是基于依赖关系的,每个任务都可能依赖于其他任务。当执行一个任务时,Gradle会先执行该任务所依赖的其他任务,然后再执行该任务本身。因此,doFirst()添加的动作会在任务完成之后执行。

对于这种情况,如果需要在任务开始执行之前添加一个动作,可以使用doLast()方法。doLast()添加的动作会在任务完成之前执行,即在任务的最后执行。

总结起来,Gradle task的doFirst()方法不是首先执行的,而是在任务完成之后执行。如果需要在任务开始执行之前添加一个动作,可以使用doLast()方法。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性、安全、稳定的云服务器实例,适用于各种应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):提供高性能、可扩展的云数据库服务,支持自动备份、容灾等功能。详情请参考:https://cloud.tencent.com/product/cdb
  • 云存储(COS):提供安全、可靠、低成本的云端存储服务,适用于图片、视频、文档等各种数据存储需求。详情请参考:https://cloud.tencent.com/product/cos
  • 人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。详情请参考:https://cloud.tencent.com/product/ai
  • 物联网(IoT):提供全面的物联网解决方案,包括设备接入、数据管理、应用开发等。详情请参考:https://cloud.tencent.com/product/iot
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Android Gradle 插件】自定义 Gradle 任务 ② ( Terminal 面板中执行 gradlew task 命令显示所有任务 | 命令行输出所有任务 | 单独执行指定任务 )

文章目录 一、 Terminal 面板中执行 gradlew task 命令显示所有任务 二、执行 gradlew task --all 命令命令行输出所有任务 三、单独执行指定任务 Android...Terminal 面板中执行 gradlew task 命令显示所有任务 ---- Terminal 面板中执行 gradlew task 命令显示所有任务 : 每个任务之后都有该任务具体作用...\Android_UI> 二、执行 gradlew task --all 命令命令行输出所有任务 ---- 执行 gradlew task --all 命令 , 可以输出所有任务 , 主要是 执行...gradlew task 命令基础上 , 将 other 分组下任务显示出来 ; 三、单独执行指定任务 ---- 这里以执行 app 下 assemble 任务为例 : 想要单独执行指定...Task 任务 , 可以右键点击 Gradle 面板 中任务列表中任务项 , 然后选择第一个选项执行任务 ; 也可以 Terminal 面板 中 , 执行 gradle :app:assemble

1.7K10

GradleTask

提示 1 :task 配置段 是配置阶段 完成 提示 2 :task doFirst、doLast 方法是 执行阶段 完成,并且 doFirst doLast 执行之前执行 。..., 常见 gradle build --rerun-tasks --continue: 忽略前面失败任务,继续执行,而不是遇到第一个失败时立即停止执行。...拓展 1:前面提到 Gradle 指令本质:一个个 task[任务], Gradle 中所有操作都是基于任务完成。 拓展 2:gradle 默认各指令之间相互依赖关系: 5....println "task 执行之前 执行 doFirst方法" } myTask.doLast(){ println "task 执行之后 执行 doLast方法" } class...任务规则 当我们执行、依赖一个不存在任务时,Gradle执行失败,报错误信息。那我们能否对其进行改进,当执行一个不存在 任务时,不是报错而是打印提示信息呢?

1.2K20

第四章 Gradle任务

上一章我们已经介绍了Gradle脚本基础,在其中我们也强调了Gradle中最要Projects和Tasks这两个概念,尤其是Tasks,我们所有Gradle构建工作都是由Tasks组合完成,那么这一章我们就详细介绍下...<<操作符GradleTask上是doLast方法短标记形式,也就是说<<可以代替doLast 过时了吧 4.5 任务执行分析 当我们执行一个Task时候其实就是执行其拥有的Actions列表...,通过这种方式你可以某些情况下控制任务执行顺序,而不是通过强依赖方式。...taskB.shouldRunAfter(taskA) 表示taskB应该在taskA执行之后执行,这里应该而不是必须,所以有可能任务顺序并不会按预设执行。...当我们执行、依赖一个不存在任务时,Gradle执行失败,失败信息是任务不存在,我们使用规则对其进行改进,当执行、依赖不存在任务时,不会执行失败,而是打印提示信息提示该任务不存在: 此外它还可以根据不同规则动态创建需要任务等情况

40910

Gradle 进阶学习 之 Task

Gradle中,这个阶段会根据你搭建图纸(build.gradle脚本)来创建任务task),然后这些任务会形成一个有序任务网络,确保每个任务都能按照正确顺序完成。...例如,你可能需要在编译之前先进行代码检查,或者在打包之后执行测试。通过doFirst和doLast,你可以灵活地控制这些依赖关系,确保任务按照正确顺序执行。...执行任务时,首先会打印'Executing myTask'。 * 3. 任务具有自定义描述和所属组信息。...mustRunAfter 确保它在 taskA 之后执行,而 taskC 使用 finalizedBy 确保 taskC 完成执行 taskB。...3.12 任务规则 Gradle 提供了一个非常有用功能,称为“任务规则(Task Rules)”,它允许你在运行一个不存在任务执行自定义逻辑,而不是直接报错。

21110

Gradle实践指南:task依赖与执行条件

使用maven时候,compile/test/install先后顺序和依赖关系都十分清晰,而在前面的例子中,可以通过gradle compile和gradle test来进行不同任务执行,但是实际这些任务之间是有依赖关系...,就像我们maven里面执行mvn install之前会做什么那样,这篇文章会继续来介绍task之间依赖与执行条件。...示例介绍 这篇文章会通过对上文例子进行重新改写,来介绍gradle对于task操作依赖和执行条件,还是如下4个任务: 编译: compile 测试:test 打包:packaging 安装:install...,task之间依赖关系实际是没有的,上文显示执行顺序实际是因为输入顺序产生gradle里面也非常容易地通过dependsOn进行依赖关系设定,这里将常用方式进行整理如下: 方式1: 通过...,可以看到test执行时compile任务被事先执行了 编译: compile 测试:test liumiaocn:hello liumiao$ gradle test [Phase: initialization

1.7K10

12--Gradle进阶 - Gradle任务类型

12--Gradle进阶 - Gradle任务类型 任务类型 前面我们定义task 都是DefaultTask 类型,如果要完成某些具体操作完全需要我们自己去编写gradle 脚本,势必有些麻烦...有的,Gradle 官网给出了一些现成任务类型帮助我们快速完成想要任务,我们只需要在创建任务时候,指定当前任务类型即可,然后即可使用这种类型中属性和API 方法了。...常见任务类型 该类型任务作用 Delete 删除文件或目录 Copy 将文件复制到目标目录中。此任务还可以复制时重命名和筛选文件。..."task 执行之前 执行 doFirst方法" } myTask.doLast() { println "task 执行之后 执行 doLast方法" } // 3....@TaskAction def doSelf() { println "Task 自身 执行in doSelf" } } 执行如下: gradle MyDefinitionTask

24720

Android—Gradle教程(一)「建议收藏」

Execution 运行阶段,Gradle根据配置阶段创建和配置执行任务子集,执行任务。 而这三个生命周期又与执行流程息息相关。...gradle执行其实就是由各种任务组合执行,来对项目进行构建 使用gradlew help命令,任何gradle项目都有一个该task,可以执行此命令观察taks执行流程是否如预期 可以使用工具查看...因为运行A任务,所以随后就进入了taskA执行阶段,执行阶段里,优先运行doFirst 其次是doLast 对应action,最后如愿调用了buildFinish方法来结束整个Gradle编译...不过这并不影响我们发挥,因为每个任务配置代码构建时候都会执行。...现在又有新问题,我们使用任何对象时候,使用完了都会被回收掉,那么任务执行完了,是不是也会有对应回收任务?那该使用什么关键字呢?

1.2K30

Gradle实践指南:Task使用方式

常见属性和方法 在前面的例子中,我们已经使用taskdescription属性进行设定gradle task显示信息,将task进行分组显示,同时使用了doFirst和doLast方法进行回调...除了这些之外,还有一些其他属性和方法,简单整理如下: 示例介绍 这篇文章会通过对上文例子进行重新改写,来介绍gradle对于task操作常见方式,还是如下4个任务: 编译: compile 测试...:test 打包:packaging 安装:install 创建task gradle非常灵活,task创建上都有很多方式,这里列举出常见几种,明白这几种,然后再看大部分gradle介绍文档时就会较为轻松了...创建任务时通过type建立扩展类和任务之间关联 通过installObjectName将数据传入task执行阶段,主要用于需要进行信息交互时,这也是常见使用场景。...TaskAction注解为缺省任务活动,当有多个时会顺次执行 这个例子中请结合注意doFirst和doLast执行顺序: doFirst checkObject installObject doLast

1.8K30

Gradle实践指南:生命周期管理

gradle构建阶段 gradle构建分为初期化/配置/执行三个阶段: 初期化:initialization 配置:configuration 执行:execution 构建生命周期 Maven...需要注意上文所讲到生命周期,通过对任务执行可以看地清清楚楚,无论对哪个任务进行执行,初始化和配置部分代码都会被执行,这点是使用gradle时需要特别注意。...gradlegroovy或者kotlin代码什么阶段会被执行,一定要理解和注意。...liumiaocn:hello liumiao$ doFrist与doLast doFirst和doLast都是gradle预留回调,执行阶段会被调用,两者顺序是doFirst() -> doLast...0s 1 actionable task: 1 executed liumiaocn:hello liumiao$ 多个任务同时执行 多个任务同时执行,就有点类似maven动作了 liumiaocn

57040

【Android Gradle 插件】自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )

文章目录 一、Gradle 自定义任务创建方法 Project#task 函数 二、Task#doFirst 函数用法 Android Plugin DSL Reference 参考文档 : Android.../current/javadoc/org/gradle/api/Task.html build.gradle 中自定义 Gradle 任务调用是 org.gradle.api.Project 中...创建具有给定名称Task并将其添加到此项目。 返回任务之前,将执行给定闭包来配置任务。...- 由以上返回值可知 , 创建任务对象是 Task 接口类型 , 该接口类文档如下 : org.gradle.api.Task 配置 ( Gradle 任务类型 ) 文档 : https://docs.gradle.org...接口 doFirst 函数 , 其作用是 任务执行后 最先执行内容 , 任务中可以执行多个 Task#doFirst 函数 , 按照先后顺序执行 , 先定义执行 , 后定义执行 ; Task

54110

为什么说 Gradle 是 Android 进阶绕不去

认识 Gradle Gradle 并不仅仅是一个语言,而是一套构建工具。早期,软件构建只有编译和打包等简单需求,但软件开发发展,现在构建变得更加复杂。...task3 依赖于 [task1, task2],执行 task3 前一定会执行 task1 和 task2 某些情况下,控制两个任务执行顺序非常有用,而不会在这些任务之间引入显式依赖关系,可以理解为弱依赖...mustRunAfter 强制顺序: 指定强制要求任务执行顺序; shouldRunAfter 非强制顺序: 指定非强制任务执行顺序,两种情况下会放弃此规则:1、该规则造成环形顺序;2、并行执行并且任务所有依赖项都已经完成...Gradle 通过对比自从上一次构建之后Task inputs 和 outputs 是否变化,来决定是否跳过执行。如果相同,则 Gralde 认为 Task 是最新,从而会跳过执行。...,那么我们应该确保配置阶段定义输入输出,而不是执行阶段定义。

2.5K10

Android Gradle Get Start

println 'Task配置代码' // 定义一个闭包 def a = { println 'Task配置代码2' } // 执行闭包 a() doFirst...但不会执行taskdoFirst,doLast内容。 最终,配置阶段结束后,会形成Task依赖拓朴图,这个图是一个有向无环图。...执行 Gradle配置阶段创建和配置任务再次筛选需要执行任务子集,这个子集筛选是由命令行下传递给Gradle任务名和目录决定,子集中每个任务都会被执行。...监听 每个任务执行时,都会 gradle.taskGraph.beforeTask,gradle.taskGraph.afterTask当整个gradle构建完成时,会回调gradle.buildFinish...我们应该将一部分不依赖网络业务逻辑,放在编译期完成,根据需要打出不同APK包。 所有编译期工作,就是由Gradle完成。我们可以根据需要,通过Gradle配置不同资源和逻辑。

89420

【Android Gradle 插件】Gradle 构建机制 ④ ( Gradle 构建生命周期 | 初始阶段 | 配置阶段 | 执行阶段 )

; Gradle 构建 是 通过 调用 Gradle#buildStarted 函数 开启 , 该函数 不属于 初始化阶段 , 下面开始 进入 初始化阶段 : 首先 , 执行 settings.gradle...构建脚本 , 确定 任务分组 , 任务之间 依赖关系 , 执行顺序 等 , 然后对任务进行配置 ; 注意这里 只对任务进行配置 , 不会执行任务 ; 编写完 build.gradle 构建脚本...后 , 并 不会生成 Gradle 任务 , 右侧 Gradle 面板中找不到自定义 Gradle 任务 , 需要点击 " Sync Now " 按钮 , 进行 配置阶段 操作 , 才会在右侧 Gradle...根目录 build.gradle 构建脚本 中 , 定义一个任务 task Hello { println "Hello" } 点击右上方 " Sync Now " 进行同步 ,...发现在 配置工程 阶段 , 执行了 Hello 任务闭包中代码 , Build 面板中输出内容如下 : 下面的输出说明 , 配置阶段只配置任务 , 并没有执行任务 ; Starting Gradle

66610

Gradle教程「建议收藏」

4.设置样本项目 本课中,我们将使用最流行Web工具之一来制作示例项目,并且不会从命令行执行它,而是使用Spring Initializr 。 只需浏览器中打开链接并进行浏览即可。...我们可以通过简单地将任务名称放在gradle命令之后项目上执行任务: 运行单个任务 gradle compileCode 上面的命令将触发上述任务,以编译项目代码。...5.2运行多个任务 就像我们在上一节中将任务名称放在gradle命令之后执行单个任务一样,我们甚至可以一次执行多个任务以指定顺序执行它们。...让我们看看如何做到这一点: 运行多个任务 gradle clean build 该命令将首先执行clean任务。 该任务完成后,将自动触发install任务。...各自构建阶段方法是: doFirst() doLast() 让我们看一个有关如何在任务中调用这两个方法示例: 调用阶段方法 task hello hello.doFirst({

2.1K10

创建Task多种方法

,我们可以使用doFirst task hello3 { doFirst { println 'hello3' } } 上面的 Gradle DSL 实际上是一种内部...,那么执行TaskA时,Gradle会先执行TaskB,执行TaskA,我们可以定义一个Task同时声明它依赖关系: task hello5(dependsOn: hello4)<< {...也可以动态地向Task中加入额外Property。执行一个Task前,我们通常都需要先设定Property值,Gradle提供了多种方法设置TaskProperty值。...首先,我们可以定义Task时候对Property进行配置: task hello7 << { description = "this is hello7" println description...这是因为 gradle 执行 Task 时分为两个阶段:配置阶段、执行阶段。执行 hello8 前,会先扫描整个build.gradle文档,然后设置属性,再执行 hello8。

83360

Android中Gradle使用

任务执行:每次测试都需要生成apk包进行测试,生成apk包是一个可以重复流程,也可以称为任务,这个过程就叫做任务执行。Ant相当于把这相同任务给自动化实现了。...依赖管理(maven)和任务执行(Ant) Gradle下载 Android Studio 中新建项目成功后会下载Gradle 地址: Win平台会默认下载到 C:\Documents and Settings...Gradle生成apk 切换到项目的根目录,执行gradlew -v 来查看下项目所用Gradle版本 如果你是第一次执行会去下载Gradle,这个过程如果不翻墙非常慢,建议翻墙 下载成功之后会看到信息...生成签名后apk App/build.gradle 配置之后每次再build时就会生成签过名包了 Gradle其它操作 Project 和 Task Gradle中有两个基本概 念:project...doLast意思是定义一个行为(映射GradleAction类),放在当前task最后,类似的,还有doFirst, 表示将定义行为放在当前task最前面,例如 task hello { doLast

82430
领券