Gradle:需要帮助才能理解

标签 gradle task

在build.gradle中有

task hello {
    doLast {
        println 'Hello World!'
    }
}

task count {
    println "one"
    doLast{
        4.times {print "$it "}
    }
    println "two"
    doFirst{
        2.times {println "$it - 1 "}
    }
    3.times {println( "$it -3")}
}

task intro(dependsOn: hello){
    doLast{
        println("I'm Gradle!")
    }
}

在 shell 中运行

gradle intro

并得到

one
two
0 -3
1 -3
2 -3
:hello
Hello World!
:intro
I'm Gradle!

BUILD SUCCESSFUL

但是这是不正确的! 正确的输出是

:hello
Hello World!
:intro
I'm Gradle!

BUILD SUCCESSFUL

我做错了什么?

ps 添加详细信息,因为这里的代码太多:( 添加详细信息,因为这里的代码太多:( 添加详细信息,因为这里的代码太多:( 添加详细信息,因为这里代码太多:(

最佳答案

为什么你认为这是错误的?也许这是绝对正确的。这都是由于构建的配置造成的。在 official user guide 中阅读相关内容.

构建过程中会发生多个阶段。其中之一是配置阶段。您不希望看到的所有输出都是配置的输出。当您在任务关闭中执行某些操作时,它将在构建的配置中执行,直到您将其放入 doLast 中。或doFirst在执行阶段运行的闭包(或者使用 << 声明任务的闭包,与 doLast 相同)。

请注意,所有任务都会执行配置,无论它们是否会执行。这就是您意外输出的原因 - 它只是作为构建配置的一部分完成,尽管它们是在某些任务中声明的。

关于Gradle:需要帮助才能理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40675869/

相关文章:

java - 如何在 Gradle 项目中使用 IntelliJ IDEA 生成一个包含 javadoc 的 .jar?

android - 使用 Gradle 控制台命令 (gradlew) 的问题

c# - 如何创建前台任务?

c# - 任务始终处于等待激活状态(查找所有串行设备)

c# - 使用 Parallel.Invoke 运行两个任务并添加超时以防一个任务需要更长的时间

android - 如何在命令行上不使用 Gradle 构建 Android apk?

java - 找不到主类 :bootRepackage

eclipse - 在Eclipse中运行Gradle?

c# - 如何启动异步任务对象

c# - 内联任务何时发生?