【问题标题】:Gradle doLast, doFirst behavior in copy task复制任务中的 Gradle doLast、doFirst 行为
【发布时间】:2016-12-06 18:27:38
【问题描述】:

build.gradle

task hello (type: Copy) {
   doLast {
      println "print from within"
   }
   println "print from outside"
}

运行时

gradle -q 你好

doLast{} 闭包甚至没有被触及。将 doLast 更改为 doFirst,我得到相同的结果:

D:\>gradle -q hello
print from outside

没有 doLast 或 doFirst:

task hello (type: Copy) {
    //doLast{ 
       println "print from within"
    //}
    println "print from outside"
}

效果很好:

D:\>gradle -q hello
print from within
print from outside

这似乎只发生在 Copy 类型的任务中。你能帮忙澄清一下吗?我正在使用 gradle 2.4。

【问题讨论】:

    标签: gradle copy task


    【解决方案1】:

    我认为这对来这个地方回答同样问题的人会有所帮助。尽管上述解释在概念上是有道理的。答案中没有提到适当的解决方案。这是我如何通过doLast 执行实现Copy 任务的解决方案。

      task hello () {
            doLast{ 
               copy {
                 println "print from within"
               }
            }
            println "print from outside"
        }
    

    这将与 doLast 一起提供复制任务的执行。

    $ gradle -q hello print from outside print from within

    希望这是有用的。

    【讨论】:

    • 如果你运行 gradle 4.10,你需要将 copy { println ... } 改为 copy { println "print from inside" from("x") into("xx") },否则会报错关于路径为空。请检查此内容并更新您非常有见地的答案。
    • 这里也值得一提的是,您从任务的定义中删除了task: Copy,否则它不会像这样工作task hello (task: Copy) {
    【解决方案2】:

    如果您在没有-q 开关的情况下运行任务,您会注意到该任务已被标记为UP-TO-DATE - 这意味着没有执行任何操作(并且您通过doLast 添加操作)。

    这是为什么呢?在此特定示例中,您没有为任务配置任何输入和输出。 Copy tasks 根据输入和输出解析它是最新的,并且由于没有配置 Gradle 假设不需要运行它。

    【讨论】:

    • 部分解释。我实际上尝试了另一个用例:在 doLast{} 闭包中添加 from:into: 。想想如果源文件内容发生了变化怎么办,任务的目的基本上是更新目的地。我们怎样才能做到这一点?看起来 doLast {} 无论如何都不会在复制类型的任务中被触及。
    • intofrom 放在doLast 中没有任何意义,因为doLast 将在执行 时间运行,而intofromconfiguration 阶段使用 - 在doLast 中配置任何东西都太晚了。在任务正文中使用frominto,它将按预期工作。您似乎还需要阅读有关 gradle 基础知识的信息。 Here的好起点
    • 我原来的帖子是专门问一个关于“复制”类型的任务的问题。我仍然很困惑。这是一个 build.gradle 文件:task mycopy(type: Copy){ from 'c:\temp\me.txt' into 'd:/' } <br> task hello(){doLast { println 'Hello, me'} } 。当您运行 gradle build.gradle hello 时,mycopy{ } 中的代码将不会运行,尽管它应该在配置阶段运行。我做错了什么?
    • @Heinz 为什么它不会运行?你怎么知道它没有运行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    相关资源
    最近更新 更多