【问题标题】:Make gradle execute a finalizedBy task for each time it is set (multiple times)让gradle在每次设置时执行一个finalizedBy任务(多次)
【发布时间】:2020-03-09 16:20:22
【问题描述】:

我使用以下情况遇到了问题:

为了连续运行不同的原生测试插件,我动态地创建了一些任务来为每个插件适当地准备环境,然后为每个托管依赖项的测试插件创建一个plugin_task

要在设备上开始测试,plugin_task 是finalizedBy connectedAndroidTest

例如调用gradle plugin_name_1 工作正常,它准备环境并开始测试。

tasks.register("allTests"){}

name_list.each { test_name ->
   def prepare_dir = tasks.register("${test_name}_Prepare_Dir") {...} 
   def copy_files = tasks.register("${test_name}_Copy_Files") {...}

   def plugin_task = tasks.register(test_name){
     dependsOn prepare_dir
     dependsOn copy_files

     finalizedBy connectedAndroidTest
   }

   allTests.configure {
     dependsOn pluginTask
   }
}

现在问题出现了,当我尝试运行 allTests 任务时:

gradle 然后正确地操作每个插件的所有动态创建的任务“prepare_dir”、“copy_files”,所有这些都被执行。

但是 connectedAndroidTest 只会在 allTests 的最后执行,所以只运行一次。但我需要在每个 plugin_task 的每一端都执行此任务。

gradle 的行为是正确的,因为它看到所有 plugin_tasks 都应由 connectedAndroidTest 完成,因此将其放在图表的末尾。

有没有可能让 gradle 多次执行这个任务? 很高兴得到帮助。

connectedAndroidTest 任务包装成动态创建的任务并让 plugin_tasks 依赖于它们,这无济于事。参数“rerun-tasks”也没有效果。

【问题讨论】:

    标签: gradle android-ndk gradle-task


    【解决方案1】:

    这不是 Gradle 的工作方式。每个任务将在每次 Gradle 调用时执行 1 次或 0 次。如果您想多次执行相同的任务(使用不同的任务输入),那么您将需要多个任务实例,而不是一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      相关资源
      最近更新 更多