首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时在gradle中执行doFirst?

何时在gradle中执行doFirst?
EN

Stack Overflow用户
提问于 2016-07-21 02:16:23
回答 1查看 1.5K关注 0票数 1

为什么0000不退出后gradle foo?在我移除doFirst foo.doFirst{ delete '0000' }之后,那0000就在那里了。

doFirst应该在foo任务脚本之前执行。

医生说:

代码语言:javascript
复制
Task doFirst(Closure action)

Adds the given closure to the beginning of this task's action list. The closure is passed this task as a parameter when executed.

完整的命令日志:

代码语言:javascript
复制
isaac-mbp:swap isaac$ cat build.gradle
task foo {
    mkdir '0000/a'
    mkdir '0000/b'
}
foo.doFirst{ delete '0000' }

isaac-mbp:swap isaac$ gradle foo
:foo

BUILD SUCCESSFUL

Total time: 0.581 secs
isaac-mbp:swap isaac$ ls -lha 0000
ls: cannot access 0000: No such file or directory
isaac-mbp:swap isaac$ gradle -v

------------------------------------------------------------
Gradle 2.14
------------------------------------------------------------

Build time:   2016-06-14 07:16:37 UTC
Revision:     cba5fea19f1e0c6a00cc904828a6ec4e11739abc

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_25 (Oracle Corporation 25.25-b02)
OS:           Mac OS X 10.11.5 x86_64
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 06:07:30

不是的。

  1. 任务是(简化)按添加顺序执行的操作集合。
  2. build.gradle分两个阶段运行:配置和执行。

以下代码中的逻辑(mkdir)将在每次计算build.gradle时执行,因为它是在配置时添加的:

代码语言:javascript
复制
task foo {
    mkdir '0000/a'
    mkdir '0000/b'
}

要解决这个问题,请添加一个操作:

代码语言:javascript
复制
task foo << {
    mkdir '0000/a'
    mkdir '0000/b'
}

现在是doFirst

代码语言:javascript
复制
task foo << {
        mkdir '0000/a'
        mkdir '0000/b'
}
foo.doFirst { delete '0000' }

现在任务有两个操作:mkdirsdelete,它们将按照适当的顺序执行。请看一看here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38493784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档