【问题标题】:Gradle, what is a sequence of execution in one task?Gradle,一个任务的执行顺序是什么?
【发布时间】:2017-01-27 18:59:50
【问题描述】:

Gradle 2.14 我写了我的自定义任务“运行”

 task run() {
    def allVariantList = [];
    android.applicationVariants.all { variant ->
        allVariantList.add(variant.getName())
        println "Current allVariantList = " + allVariantList
    }
    println "Result allVariantList = " + allVariantList
}

开始我的任务:gradlew run

结果:

结果 allVariantList = []

当前 allVariantList = [prod_no_check]

当前 allVariantList = [prod_no_check, prod]

当前 allVariantList = [prod_no_check, prod, stage]

当前 allVariantList = [prod_no_check, prod, stage, dev]

当前 allVariantList = [prod_no_check, prod, stage, dev, release]

当前 allVariantList = [prod_no_check, prod, stage, dev, release, dev_no_check]

问题:

  1. 为什么 println "Result allVariantList = " + allVariantListprintln "Current allVariantList = " + allVariantList

  2. 之前运行
  3. 我需要在 println "Result allVariantList = " + allVariantList 之后执行 println "当前 allVariantList = " + allVariantList。我该怎么做?

【问题讨论】:

标签: gradle


【解决方案1】:

我认为问题在于,在配置您的任务时(您在配置时完成所有工作,而不是在执行时,applicationVariants 尚未由 android 插件配置。applicationVariants.all 运行于所有已经添加的变体,以及将来添加的所有变体。

因此,您的输出将表明在配置时尚未设置任何变体,因此您的结果打印是空的,其他的会在创建变体时稍后出现。

当您在配置时执行所有操作时,它也将始终完成,即使您不执行任务也是如此。如果你调用gradlew help 或其他任何东西,你会得到相同的输出。

因此,要么在执行阶段执行所有代码(将其包装在doLast { } 闭包中),要么至少在执行阶段执行结果打印。如果您需要在执行阶段之前完成您的工作,并且无论您的任务是否实际运行,您都可以至少将您的结果打印包装在一个 afterEvaluate { } 闭包中,该闭包在项目评估后执行,但仍然在配置阶段。

【讨论】:

【解决方案2】:

好的,谢谢大家。这是工作:

task run() {
  description "Install and run app on device/emulator"
  def allVariantList = [];
  android.applicationVariants.all { variant ->
    allVariantList.add(variant.getName())
    println "Current allVariantList = " + allVariantList
  }
  doLast {
    println "Result allVariantList = " + allVariantList
  }
}

这里是解释。 https://docs.gradle.org/current/userguide/build_lifecycle.html

示例 22.1。单个项目构建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多