Лучше использовать зависимости задач или task.doLast в Gradle?

После создания моего окончательного выходного файла с помощью Gradle я хочу сделать две вещи. Обновите локальный файл version.properties и скопируйте окончательный вывод в определенный каталог для архивирования. Предположим, у меня уже есть 2 реализованных метода, которые делают именно то, что я только что описал, updateVersionProperties() и archiveOutputFile().

Я знаю, интересно, как лучше всего это сделать...

Альтернатива А:

assembleRelease.doLast {
    updateVersionProperties()
    archiveOutputFile()
}

Альтернатива Б:

task myBuildTask(dependsOn: assembleRelease) << {
    updateVersionProperties()
    archiveOutputFile()
}

И здесь я бы назвал myBuildTask вместо assembleRelease, как в варианте А.

Какой из них является рекомендуемым способом сделать это и почему? Есть ли преимущество одного над другим? Хотелось бы пояснений... :)


person rfgamaral    schedule 03.07.2013    source источник


Ответы (1)


По возможности моделируйте новые действия как отдельные задачи. (В вашем случае вы можете добавить еще две задачи.) Это дает много преимуществ:

  • Улучшенная обратная связь о том, какая активность в настоящее время выполняется или не удалась.
  • Возможность объявлять входы и выходы задачи (пожинать все преимущества, которые вытекают из этого)
  • Возможность повторного использования существующих типов задач
  • Больше возможностей Gradle для параллельного выполнения задач
  • И т.п.

Иногда нелегко смоделировать действие как отдельную задачу. (Одним из примеров является ситуация, когда необходимо выполнить постобработку выходных данных существующей задачи на месте. Выполнение этого в отдельной задаче приведет к тому, что исходная задача никогда не будет up-to-date при последующих запусках.) Только тогда активность должна быть присоединена к существующая задача с doLast.

person Peter Niederwieser    schedule 03.07.2013
comment
Как вы рекомендуете создавать зависимости этих задач? Я хотел бы, чтобы одна задача собирала весь проект (в основном заменяя assembleRelease), и обе эти задачи должны выполняться только после успешного выполнения assembleRelease. Между ними порядок не очень актуален. - person rfgamaral; 03.07.2013