example - Ejecutar tarea de gradle en subproyectos.
settings gradle module (2)
Tengo un proyecto MultiModule gradle que estoy intentando configurar.
Root
projA
projB
other
projC
projD
projE
...
Lo que quiero hacer es tener una tarea en la raíz build.gradle que ejecutará la tarea buildJar en cada uno de los proyectos en el otro directorio.
Se que puedo hacer
configure(subprojects.findAll {it.name != ''tropicalFish''}) {
task hello << { task -> println "$task.project.name"}
}
Pero esto también obtendrá projA y projB, solo quiero ejecutar la tarea en c, d, e ... Por favor, hágame saber la mejor manera de lograrlo.
Encontré esta pregunta hoy porque tengo el mismo problema. Se pueden usar todas las formas mencionadas por Mark, pero todas tienen algunas desventajas. Así que estoy agregando una opción más:
4. Cambiando el proyecto actual.
gradle -p other hello
Esto cambia el "proyecto actual" y luego ejecuta todas las tareas llamadas hello
en el proyecto actual.
No estoy completamente seguro de cuál de estos estás buscando, pero deberían cubrir tus bases.
1. Llamando las tareas directamente.
Solo deberías poder llamar
gradle :other/projC:hello :other/projD:hello
He probado esto con:
# Root/build.gradle
allprojects {
task hello << { task -> println "$task.project.name" }
}
y
# Root/settings.gradle
include ''projA''
include ''projB''
include ''other/projC''
include ''other/projD''
2. Solo creando tareas en los subproyectos.
¿O es que solo desea que la tarea se cree en los otros / * proyectos?
Si este último, entonces funciona lo siguiente:
# Root/build.gradle
allprojects {
if (project.name.startsWith("other/")) {
task hello << { task -> println "$task.project.name" }
}
}
y luego puede ser llamado con:
$ gradle hello
:other/projC:hello
other/projC
:other/projD:hello
other/projD
3. Creando una tarea que ejecuta tareas en los subproyectos solamente
Esta versión coincide con mi lectura de su pregunta, lo que significa que ya hay una tarea en los subproyectos (buildJar), y crear una tarea en la raíz que solo llamará a los subproyectos / *: buildJar
allprojects {
task buildJar << { task -> println "$task.project.name" }
if (project.name.startsWith("other/")) {
task runBuildJar(dependsOn: buildJar) {}
}
}
Esto crea una tarea "buildJar" en cada proyecto, y "runBuildJar" en los otros proyectos / * solamente, por lo que puede llamar:
$ gradle runBuildJar
:other/projC:buildJar
other/projC
:other/projC:runBuildJar
:other/projD:buildJar
other/projD
:other/projD:runBuildJar
Tu pregunta se puede leer de muchas maneras, espero que esto cubra todas :)