Je suis en train de faire une tâche qui doit appeler un certain nombre d'autres tâches.
Voici ce que j'ai
task ci(dependsOn: [
clean,
build,
test
])
Ce qui est étrange est la sortie que je vois:
gradle ci
:compileJava
:processResources UP-TO-DATE
:classes
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:clean // cleaning after the build
:build
:ci
Notez que le nettoyage a lieu après la cible de génération, ce qui supprime ma génération.
Si je change de tâche pour:
task ci(dependsOn: [
clean,
test
])
Ensuite, il semble exécuter dans le bon ordre:
:clean UP-TO-DATE // cleaning before the build
:compileJava
:processResources UP-TO-DATE
:classes
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:ci UP-TO-DATE
J'ai essayé de réparer la cible d'origine en ajoutant un build.dependsOn clean, mais cela semble n'avoir aucun effet.
Toute aide est appréciée.
Il semble que je sois tombé par hasard sur la question débattue dans le { GRADLE-427 le Guide de l'utilisateur Gradle - Section 15.5 pour établir l'ordre entre les tâches disparates. Ma cible finale ci apparaît ainsi:
task ci(dependsOn: ['clean', 'build', 'uploadArchives'])
build.mustRunAfter clean
uploadArchives.mustRunAfter build
Et tout fonctionne maintenant comme prévu.
Version TLDR: Voici comment je l'ai fait dans l'un de mes projets (sans introduire de dépendances artificielles).
//--- build aliases : define a synonym here if you want a shortcut to run multiple targets
def buildAliases = [
'all' : ['clean', 'assemble', 'runProvisioner', 'stopTomcat', 'installTomcat', 'deployToTomcat', 'startTomcat'],
'rebuild' : ['clean', 'assemble']
]
def expandedTaskList = []
gradle.startParameter.taskNames.each {
expandedTaskList << (buildAliases[it] ? buildAliases[it] : it)
}
gradle.startParameter.taskNames = expandedTaskList.flatten()
println "\n\n\texpanded task list: ${gradle.startParameter.taskNames }\n\n"
Pour utiliser ces alias, appelez-les en tant que tâches. Exemples:
./gradlew all
./gradlew rebuild
ou
gradle all
gradle rebuild
Pour plus d'informations, voir:
https://caffeineinduced.wordpress.com/2015/01/25/run-a-list-of-gradle-tasks-in-specific-order/
Je préférerais ne pas ajouter de tâche d'emballage uniquement pour m'assurer d'une commande.
Dans ce cas, ma solution est la suivante -
run.dependsOn 'clean'
compileJava.mustRunAfter 'clean'
Cela garantit que la tâche clean
est exécutée avant l'exécution du dégradé compileJava
. Tellement efficacement, vous créerez une nouvelle construction tout le temps.
J'espère que cela t'aides.
En utilisant certaines qualités de Groovy/Gradle, la solution peut être encore améliorée avec les éléments suivants:
def taskNames = [...] // list of task names
task('lastTask', dependsOn: taskNames)
taskNames.inject(null) { acc, val ->
if (acc != null) tasks[val].mustRunAfter acc
tasks[val]
}
de cette façon, vous pouvez avoir un endroit avec une liste de tâches.