Как выполнить зависимость задачи, только если задача не актуальна? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть пара дополнительных задач, которые выглядят примерно так:


task taskA(){
  inputs.file('config')
  outputs.file('a-out')
}

task taskB(dependsOn: taskA){
  /*
   * Strictly speaking, 'a-out' is also a input of taskB, but
   * if there is already output for taskB and 'config' has not changed,
   * there is no need to regenerate 'a-out'.
   */
  inputs.file('config')
  outputs.file('b-out')
}

taskB - это актуальная задача, которая меня интересует, а taskA служит только производителем промежуточных данных.для taskB.При отсутствии предыдущего вывода очень важно, чтобы taskA был выполнен до taskB.

Я хотел бы иметь возможность полностью пропустить taskA, если taskBобновлен (или загружен из кэша сборки), поскольку промежуточная генерация данных в этом случае просто теряет время.Приведенная выше настройка выведет UP-TO-DATE для обеих задач, но это не то, что мне нужно, поскольку при использовании кэша сборки распаковка кэша taskA занимает немного времени, что опять-таки теряется.

1 Ответ

0 голосов
/ 19 сентября 2019

В конце концов я обошел эту проблему, создав внешний сценарий, который последовательно вызывает taskA и taskB, а затем создал taskC, который имеет те же входные данные, что и taskB, и вызывает сценарий.

По сути, это объединило обе задачи в одну, и обе они будут пропущены, когда окончательный результат будет обновлен.Это работает, но я надеялся, что есть более чистый способ сделать это с помощью gradle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...