Tâche Gradle en fin de build avec une build multiprojet
-
21-12-2019 - |
Question
J'essaie de créer ma propre tâche, qui créera un package de tous les artefacts générés lors de ma construction multi-projets.
Actuellement, ce que je fais correctement, c'est simplement :
gradle build createPackage
Ce qui donne un résultat comme celui-ci :
: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
Avec le createPackage
la tâche étant :
task createPackage {
println "Creating Package..."
println "Created."
}
Cependant, je voudrais simplement le faire en exécutant une seule commande, alors quelle serait la meilleure façon de le faire et de garantir que l'ordre reste maintenu ?
Idéalement, j'aimerais appeler build
au sein de createPackage
tâche ou ajouter au build
tâche avec ma tâche.
La solution
Ok, en lisant entre les lignes, il y a quelques points à clarifier
1) Vos printlns sont exécutés dans la phase de configuration, pas dans la phase d'exécution.Voir http://www.gradle.org/docs/current/userguide/build_lifecycle.html pour plus d'informations.
2) Vous n’avez pas une seule tâche de « construction ». gradle build
sur la ligne de commande exécutera la tâche « build » de chacun de vos sous-projets.La tâche de votre package devra dépendre de chacun d’eux.Quelque chose comme..
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
dependsOn subprojects*.build
}
3) Vous pouvez être plus déclaratif avec Gradle - dites-lui simplement ce que vous voulez emballer et il déterminera ce dont il a besoin pour fonctionner.Par exemple, vous pouvez dire que vous souhaitez compresser tous les fichiers jar de vos sous-projets.
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
from subprojects*.jar
}
Autres conseils
Il existe de nombreuses façons.Une suggestion est de modifier build
dépendre de createPackage
pour être sûr que tu peux appeler juste gradle build
.Ensuite, vous souhaitez améliorer votre tâche et indiquer quelles sont ses entrées (ce sont probablement les sorties d'autres tâches comme jar
).Gradle ajoutera ces tâches à l'exécution lorsque vous exécuterez la build et pourra les réexécuter en fonction de l'état à jour de chaque tâche.Ceci est documenté dans le guide de l'utilisateur - http://www.gradle.org/docs/current/userguide/more_about_tasks.html#sec:up_to_date_checks et plus tard dans un chapitre sur les tâches personnalisées.