Задача Gradle в конце сборки с многопроектной сборкой

StackOverflow https://stackoverflow.com//questions/24026481

  •  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 и позже в главе, посвященной пользовательским задачам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top