Заставьте 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 должны быть завершены с помощью connectAndroidTest, и поэтому помещает его в конец графика.

Есть ли возможность заставить Gradle выполнять эту задачу несколько раз? Был бы рад помощи.

Оборачивая задачу connectedAndroidTest в динамически создаваемые задачи и позволяя plugin_tasks зависеть от них, это не помогает. Также не действует параметр "rerun-tasks".


person rolander    schedule 13.11.2019    source источник


Ответы (1)


Это не то, как работает Gradle. Каждая задача будет выполняться 1 или 0 раз за вызов Gradle. Если вы хотите выполнить одну и ту же задачу несколько раз (с разными входными данными задачи), вам потребуется несколько экземпляров задачи, а не один.

person lance-java    schedule 13.11.2019