首页 > 解决方案 > 让gradle在每次设置时执行一个finalizedBy任务(多次)

问题描述

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

为了连续运行不同的本机测试插件,我动态地创建了一些任务来为每个插件适当地准备环境,然后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”也没有效果。

标签: gradleandroid-ndkgradle-task

解决方案


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


推荐阅读