gradle - 让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”也没有效果。
解决方案
这不是 Gradle 的工作方式。每个任务将在每次 Gradle 调用时执行 1 次或 0 次。如果您想多次执行相同的任务(使用不同的任务输入),那么您将需要多个任务实例,而不是一个。
推荐阅读
- php - codeigniter 多个复选框更新用户 ID
- python - 如何在运行 python 循环时将嵌套列表附加到列表中?
- java - Java:您的 CPU 支持未编译此 TensorFlow 二进制文件以使用的指令:AVX2
- python - Python - 额外的关键字(?)和继承
- firebase - 在 Firebase 安全规则的更新中使用 newData
- c# - Serilog - 缺少参数的警告
- node.js - 不能在 $or 中使用 $in 吗?
- javascript - 我不理解使用字符串和布尔值的逻辑运算符
- javascript - 倒数计时器暂停/恢复功能javascript
- android - 在应用程序的一个实例中安装所有构建类型,并允许在运行时选择构建类型