Задача Gradle в конце сборки с многопроектной сборкой
-
21-12-2019 - |
Вопрос
Я пытаюсь создать свою собственную задачу, которая создаст пакет всех артефактов, созданных во время моей многопроектной сборки.
В настоящее время то, что я делаю правильно, это просто:
gradle build createPackage
Что дает следующий результат:
:test-utility:compileJava UP-TO-DATE
:test-utility:processResources UP-TO-DATE
...
:test-utility:check UP-TO-DATE
:test-utility:build UP-TO-DATE
Creating Package...
Created.
BUILD SUCCESSFUL
Total time: 4.654 secs
С createPackage
задача такая:
task createPackage {
println "Creating Package..."
println "Created."
}
Однако я хотел бы упростить это, выполнив всего одну команду, так как лучше всего это сделать и обеспечить сохранение порядка?
В идеале я бы хотел позвонить build
в рамках createPackage
задачу или добавить к build
задача с моей задачей.
Решение
Хорошо, читая между строк, есть кое-что, что нужно прояснить.
1) Ваши printlns запускаются на этапе настройки, а не на этапе выполнения.Видеть http://www.gradle.org/docs/current/userguide/build_lifecycle.html для получения дополнительной информации.
2) У вас нет ни одной задачи «сборки». gradle build
в командной строке запустит задачу «сборки» каждого из ваших подпроектов.Задача вашего пакета должна зависеть от них всех.Что-то вроде..
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
dependsOn subprojects*.build
}
3) Вы можете быть более декларативным с gradle - просто сообщите ему, что вы хотите упаковать, и он выяснит, что ему нужно для запуска.Например, вы можете сказать, что хотите заархивировать все jar-файлы из ваших подпроектов.
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
from subprojects*.jar
}
Другие советы
Есть много способов.Одно из предложений — изменить build
зависеть от createPackage
чтобы убедиться, что вы можете позвонить просто gradle build
.Затем вы хотите улучшить свою задачу и указать, каковы ее входные данные (вероятно, это результаты некоторых других задач, таких как jar
).Gradle добавит эти задачи к выполнению при запуске сборки и сможет повторно запустить их на основе актуального статуса каждой задачи.Это описано в руководстве пользователя - http://www.gradle.org/docs/current/userguide/more_about_tasks.html#sec:up_to_date_checks и позже в главе, посвященной пользовательским задачам.