Gradle - Tareas

El script de compilación de Gradle describe uno o más proyectos. Cada proyecto se compone de diferentes tareas. Una tarea es un trabajo que realiza una construcción. La tarea puede consistir en compilar algunas clases, almacenar archivos de clases en una carpeta de destino separada, crear JAR, generar Javadoc o publicar algunos logros en repositorios.

Este capítulo explica qué es una tarea y cómo generar y ejecutar una tarea.

Definición de tareas

Tarea es una palabra clave que se utiliza para definir una tarea en un script de construcción. Eche un vistazo al siguiente ejemplo que representa una tarea llamadahello que imprime tutorialspoint. Copie y guarde el siguiente script en un archivo llamadobuild.gradle. Este script de construcción define un nombre de tarea hola que se utiliza para imprimir la cadena de puntos de tutoría.

task hello {
   doLast {
      println 'tutorialspoint'
   }
}

Ejecute el siguiente comando en el símbolo del sistema. Ejecuta el script anterior. Debe ejecutar esto donde se almacena el archivo build.gradle.

C:\> gradle –q hello

Salida:

tutorialspoint

Puede simplificar esta tarea de saludo especificando un acceso directo (representa un símbolo <<) al doLastdeclaración. Si agrega este acceso directo a la tarea anteriorhello se verá como el siguiente script.

task hello << {
   println 'tutorialspoint'
}

Puede ejecutar el script anterior usando gradle –q hello mando.

Aquí hay algunas variaciones en la definición de una tarea, échale un vistazo. El siguiente ejemplo define una tareahello.

Copie y guarde el siguiente código en build.gradle archivo.

task (hello) << {
   println "tutorialspoint"
}

Ejecute el siguiente comando en el símbolo del sistema. Ejecuta el script dado anteriormente. Debería ejecutar esto, donde se almacena el archivo build.gradle.

C:\> gradle –q hello

Salida:

tutorialspoint

También puede utilizar cadenas para los nombres de las tareas. Eche un vistazo al mismo ejemplo de saludo. Aquí usaremos String como tarea.

Copie y guarde el siguiente código en build.gradle archivo.

task('hello') << {
   println "tutorialspoint"
}

Ejecute el siguiente comando en el símbolo del sistema. Ejecuta el script dado anteriormente. Debería ejecutar esto, donde se almacena el archivo build.gradle.

C:\> gradle –q hello

Salida:

tutorialspoint

También puede utilizar una sintaxis alternativa para definir una tarea. Eso es usar el método create () para definir una tarea. Eche un vistazo al mismo ejemplo de saludo que se muestra a continuación.

Copie y guarde el siguiente código en build.gradle archivo.

tasks.create(name: 'hello') << {
   println "tutorialspoint"
}

Ejecute el siguiente comando en el símbolo del sistema. Ejecuta el script dado anteriormente. Debería ejecutar esto, donde se almacena el archivo build.gradle.

C:\> gradle –q hello

Salida:

tutorialspoint

Localización de tareas

Si desea ubicar las tareas que definió en el archivo de compilación, debe usar las propiedades estándar del proyecto respectivas. Eso significa que cada tarea está disponible como una propiedad del proyecto, utilizando el nombre de la tarea como el nombre de la propiedad.

Eche un vistazo al siguiente código que accede a las tareas como propiedades.

Copie y guarde el siguiente código en build.gradle archivo.

task hello

println hello.name
println project.hello.name

Ejecute el siguiente comando en el símbolo del sistema. Ejecuta el script dado anteriormente. Debería ejecutar esto, donde se almacena el archivo build.gradle.

C:\> gradle –q hello

Salida:

hello
hello

También puede utilizar todas las propiedades a través de la colección de tareas.

Copie y guarde el siguiente código en build.gradle archivo.

task hello

println tasks.hello.name
println tasks['hello'].name

Ejecute el siguiente comando en el símbolo del sistema. Ejecuta el script dado anteriormente. Debería ejecutar esto, donde se almacena el archivo build.gradle.

C:\> gradle –q hello

Salida:

hello
hello

También puede acceder a la ruta de la tarea utilizando las tareas. Para esto, puede llamar al método getByPath () con un nombre de tarea, una ruta relativa o una ruta absoluta.

Copie y guarde el siguiente código en build.gradle archivo.

project(':projectA') {
   task hello
}
task hello

println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path

Ejecute el siguiente comando en el símbolo del sistema. Ejecuta el script dado anteriormente. Debería ejecutar esto, donde se almacena el archivo build.gradle.

C:\> gradle –q hello

Salida:

:hello
:hello
:projectA:hello
:projectA:hello

Agregar dependencias a las tareas

Puede hacer que una tarea dependa de otra tarea, lo que significa que cuando se realiza una tarea, solo se iniciará otra. Cada tarea se diferencia con el nombre de la tarea. La colección de nombres de tareas se refiere a su colección de tareas. Para hacer referencia a una tarea en otro proyecto, debe utilizar la ruta del proyecto como prefijo del nombre de la tarea correspondiente.

El siguiente ejemplo que agrega una dependencia de taskX a taskY.

Copie y guarde el siguiente código en build.gradlearchivo. Eche un vistazo al siguiente código.

task taskX << {
   println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
   println "taskY"
}

Ejecute el siguiente comando en el símbolo del sistema. Ejecuta el script dado anteriormente. Debería ejecutar esto, donde elbuild.gradle almacenes de archivos.

C:\> gradle –q taskY

Salida:

taskX
taskY

El ejemplo anterior agrega dependencia a la tarea usando sus nombres. Hay otra forma de lograr la dependencia de la tarea que es definir la dependencia mediante un objeto Task.

Tomemos el mismo ejemplo de taskY que depende de taskX pero estamos usando objetos de tarea en lugar de nombres de referencia de tareas.

Copie y guarde el siguiente código en build.gradle archivo.

task taskY << {
   println 'taskY'
}
task taskX << {
   println 'taskX'
}
taskY.dependsOn taskX

Ejecute el siguiente comando en el símbolo del sistema. Debe ejecutar esto donde se almacena el archivo build.gradle.

C:\> gradle –q taskY

Salida:

taskX
taskY

El ejemplo anterior agrega dependencia a la tarea usando sus nombres. Hay otra forma de lograr la dependencia de tareas que es definir la dependencia mediante un objeto Task.

Aquí tomamos el mismo ejemplo de que taskY depende de taskX pero estamos usando objetos de tarea en lugar de nombres de referencias de tareas. Échale un vistazo.

Copie y guarde el siguiente código en build.gradlearchivo. Eche un vistazo al siguiente código.

task taskX << {
   println 'taskX'
}
taskX.dependsOn {
   tasks.findAll { 
      task → task.name.startsWith('lib') 
   }
}
task lib1 << {
   println 'lib1'
}
task lib2 << {
   println 'lib2'
}
task notALib << {
   println 'notALib'
}

Ejecute el siguiente comando en el símbolo del sistema. Ejecuta el script dado anteriormente. Debería ejecutar esto, donde elbuild.gradle almacenes de archivos.

C:\> gradle –q taskX

Salida:

lib1
lib2
taskX

Agregar una descripción a una tarea

Puede agregar una descripción a su tarea. Esta descripción se muestra al ejecutarGradle tasks. Esto es posible mediante el uso de la palabra clave descripción.

Copie y guarde el siguiente código en build.gradlearchivo. Eche un vistazo al siguiente código.

task copy(type: Copy) {
   description 'Copies the resource directory to the target directory.'
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
   println("description applied")
}

Ejecute el siguiente comando en el símbolo del sistema. Debe ejecutar esto donde se almacena el archivo build.gradle.

C:\> gradle –q copy

Si el comando se ejecuta correctamente, obtendrá el siguiente resultado.

description applied

Saltarse tareas

Se pueden omitir tareas pasando un cierre de predicado. Esto es posible solo si el método de una tarea o un cierre arrojando unStopExecutionException antes de que se ejecute el trabajo real de una tarea.

Copie y guarde el siguiente código en build.gradle archivo.

task eclipse << {
   println 'Hello Eclipse'
}

// #1st approach - closure returning true, if the task should be executed, false if not.
eclipse.onlyIf {
   project.hasProperty('usingEclipse')
}

// #2nd approach - alternatively throw an StopExecutionException() like this
eclipse.doFirst {
   if(!usingEclipse) {
      throw new StopExecutionException()
   }
}

Ejecute el siguiente comando en el símbolo del sistema. Debe ejecutar esto donde se almacena el archivo build.gradle.

C:\> gradle –q eclipse

Estructura de tareas

Gradle tiene diferentes fases cuando se trabaja con tareas. En primer lugar, hay una fase de configuración, donde se ejecuta el código, que se especifica directamente en el cierre de una tarea. El bloque de configuración se ejecuta para cada tarea disponible y no solo para aquellas tareas que se ejecutan posteriormente.

Después de la fase de configuración, la fase de ejecución ejecuta el código dentro del doFirst o doLast cierres de esas tareas, que realmente se ejecutan.