multi example create gradle build.gradle multi-module

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 :)