J'ai un projet Gradle MultiModule que j'essaie de configurer.
Root
projA
projB
other
projC
projD
projE
...
Je veux pouvoir faire est d'avoir une tâche dans la racine build.gradle qui exécutera la tâche buildJar dans chacun des projets de l'autre répertoire.
Je sais que je peux faire
configure(subprojects.findAll {it.name != 'tropicalFish'}) {
task hello << { task -> println "$task.project.name"}
}
Mais cela obtiendra également projA et projB, je veux exécuter la tâche uniquement sur c, d, e ... Veuillez me faire savoir la meilleure façon d'y parvenir.
Je ne sais pas exactement lequel de ces éléments vous recherchez, mais ils devraient couvrir vos bases.
1. Appel direct des tâches
Vous devriez juste pouvoir appeler
gradle :other/projC:hello :other/projD:hello
J'ai testé cela avec:
# Root/build.gradle
allprojects {
task hello << { task -> println "$task.project.name" }
}
et
# Root/settings.gradle
include 'projA'
include 'projB'
include 'other/projC'
include 'other/projD'
2. Création de tâches uniquement dans les sous-projets
Ou est-ce que vous voulez seulement que la tâche soit créée sur les autres projets/*?
Si ce dernier, alors les travaux suivants:
# Root/build.gradle
allprojects {
if (project.name.startsWith("other/")) {
task hello << { task -> println "$task.project.name" }
}
}
et il peut ensuite être appelé avec:
$ gradle hello
:other/projC:hello
other/projC
:other/projD:hello
other/projD
. Création d'une tâche qui exécute des tâches dans les sous-projets uniquement
Cette version correspond à ma lecture de votre question, ce qui signifie qu'il y a déjà une tâche sur les sous-projets (buildJar), et la création d'une tâche en racine qui appellera uniquement les sous-projets other/*: buildJar
allprojects {
task buildJar << { task -> println "$task.project.name" }
if (project.name.startsWith("other/")) {
task runBuildJar(dependsOn: buildJar) {}
}
}
Cela crée une tâche "buildJar" sur chaque projet et "runBuildJar" sur les autres projets/* uniquement, vous pouvez donc appeler:
$ gradle runBuildJar
:other/projC:buildJar
other/projC
:other/projC:runBuildJar
:other/projD:buildJar
other/projD
:other/projD:runBuildJar
Votre question peut être lue de plusieurs façons, j'espère que cela les couvre toutes :)
J'ai trouvé cette question aujourd'hui parce que j'ai le même problème. Tous les moyens mentionnés par Mark peuvent être utilisés, mais tous ont des inconvénients. J'ajoute donc une option de plus:
4. Changement de projet en cours
gradle -p other hello
Cela commute le "projet en cours", puis exécute toutes les tâches nommées hello
sous le projet en cours.