Tarea de Gradle al final de la compilación con una compilación multiproyecto
-
21-12-2019 - |
Pregunta
Estoy intentando crear mi propia tarea, que creará un paquete de todos los artefactos generados durante la compilación de mi multiproyecto.
Actualmente lo que hago bien ahora es solo:
gradle build createPackage
Lo que da un resultado como el siguiente:
: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
Con el createPackage
siendo la tarea:
task createPackage {
println "Creating Package..."
println "Created."
}
Sin embargo, me gustaría simplificarlo ejecutando un solo comando, entonces, ¿cuál sería la mejor manera de hacerlo y garantizar que el orden se mantenga?
Idealmente me gustaría llamar build
dentro de createPackage
tarea o anexarla a la build
tarea con mi tarea.
Solución
Ok, leyendo entre líneas hay algunas cosas que aclarar.
1) Sus printlns se ejecutan en la fase de configuración, no en la fase de ejecución.Ver http://www.gradle.org/docs/current/userguide/build_lifecycle.html para más información.
2) No tienes una sola tarea de "construcción". gradle build
en la línea de comando ejecutará la tarea de 'construcción' de cada uno de sus subproyectos.La tarea de su paquete debería depender de todos ellos.Algo como..
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
dependsOn subprojects*.build
}
3) Puede ser más declarativo con gradle: simplemente dígale qué desea empaquetar y descubrirá qué necesita ejecutar.Por ejemplo, puedes decir que quieres cerrar todos los frascos de tus subproyectos.
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
from subprojects*.jar
}
Otros consejos
Hay muchas maneras.Una sugerencia es modificar build
depender de createPackage
para asegurarte de que puedes llamar solo gradle build
.Entonces desea mejorar su tarea y decir cuáles son sus entradas (probablemente esas sean salidas de algunas otras tareas como jar
).Gradle agregará estas tareas a la ejecución cuando ejecute la compilación y podrá volver a ejecutarlas según el estado actualizado de cada tarea.Esto está documentado en la guía del usuario. http://www.gradle.org/docs/current/userguide/more_about_tasks.html#sec:up_to_date_checks y más adelante en un capítulo sobre tareas personalizadas.