Quiero ejecutar varias tareas de Gradle como una. Entonces en lugar de
./gradlew clean build publish
Quiero tener una tarea personalizada
./gradlew cleanBuildPublish
que se ejecuta clean
build
y publish
en orden.
¿Como es eso posible?
Esto no funciona
task cleanBuildPublish {
dependsOn 'clean'
dependsOn 'build'
dependsOn 'publish'
}
Respuestas:
Si necesita ejecutar algunas tareas en un orden predefinido, no solo debe establecer
dependsOn
, sino también establecer lamustRunAfter
propiedad para estas tareas, como en el siguiente código:dependsOn
no define un orden de ejecución de tareas, solo hace que una tarea dependa de otra, mientras que lomustRunAfter
hace.fuente
Cannot invoke method mustRunAfter() on null object
cleanBuildPublish
después de que se hayan definido todas las tareas individuales. Parece que las tareas de Gradle se leen de arriba a abajo. Eso resolvió mi problema paraCannot invoke method mustRunAfter() on null object
También puede utilizar la clase base de tareas llamada
GradleBuild
Aquí cómo puedes hacer eso con
GradleBuild
fuente
project.tasks.register
para crear su tarea y eso es todo.Si la tarea de publicación está en un subproyecto llamado subProjectName,
fuente
Pruebe la siguiente forma de hacer que cleanBuildPublish dependa de otras tareas
build.gradle
Salida
consulte https://docs.gradle.org/current/userguide/more_about_tasks.html#addDependencyUsingTask para obtener más detalles
fuente
Mi enfoque es
Esto funciona para mi.
fuente
Así es como lo hice, con la secuencia de comandos de Kotlin, usando depende de cómo y debeRunAfter. A continuación, se muestra un ejemplo de ejecución de dos tareas, una (tarea "importUnicodeFiles" registrada personalizada) que se encuentra en "este" proyecto y otra (tarea "ejecución" predefinida) que está en un proyecto hermano llamado ": unicode":
Los desarrolladores de Gradle generalmente desaconsejan este enfoque (dicen que forzar el pedido es malo y que ejecutar tareas de otros proyectos es malo), y están trabajando en una forma de publicar resultados entre proyectos; ver: https://docs.gradle.org/current/userguide/cross_project_publications.html
fuente
Así es como lo hice, con la secuencia de comandos de Kotlin, usando depende de cómo y debeRunAfter. A continuación, se muestra un ejemplo de ejecución de dos tareas, una (tarea "importUnicodeFiles" registrada personalizada) que se encuentra en "este" proyecto y otra (tarea "ejecución" predefinida) que está en un proyecto hermano llamado ": unicode":
fuente
Intente agregar
defaultTasks
build.gradle. Por ej.defaultTasks 'clean', 'build', 'publish'
fuente