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

Я хотел бы иметь одну задачу Gradle, taskA, для запуска выполнения другой задачи, taskB, если обе они не обновлены, но выполнение taskB не должно вызывать выполнение taskA, если только taskB не актуально. Как это можно сделать?

Итак, здесь задействованы две части зависимости задачи: иерархия задач и последние проверки. Я хотел бы спать в состоянии настроить иерархию задач, но не включать в себя последнюю проверку для taskA.

Контекст: taskA должен выполняться, если его входные данные изменяются или taskB выполняется на компьютере разработчика (то есть не на CI). taskB должно выполняться, если оно не обновлено. Это связано с тем, что вывод taskB - это исполняемый файл, который запускается taskA. Причина, по которой taskA не должен выполняться, если обновлен только исполняемый файл, заключается в том, что обновленный исполняемый файл может выдавать выходные данные, отличные от предыдущего исполняемого файла. Этот новый вывод может вызвать проблемы с другими частями сборки. Поскольку целью вывода является обеспечение того, чтобы пользователи следовали передовым методам, новый вывод обновленного исполняемого файла можно игнорировать в сборках CI.

Более конкретно, taskA вызывает двоичный файл protolock, который выводится taskB. taskA выводит файл proto.lock, который должен зафиксировать инженер. Автоматическая фиксация этого файла может привести к неожиданностям для инженеров и подрыву цели этих проверок.

1 Ответ

0 голосов
/ 14 ноября 2018

Использование onlyIf:

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