Tarea Copy

Con la tarea Copy podemos copiar archivos en Gradle. En este ejemplo vemos cómo copiar cosas usando las propiedades from, into, include y exclude.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Cuando trabajamos en la construcción de proyectos con Gradle, una tarea común es copiar archivos y directorios para preparar la distribución de nuestro software. Por ejemplo, imaginemos que tenemos un directorio llamado tools que contiene archivos importantes como readme.txt, license.txt, instalar.sh o instalar.bat. Queremos que, al ejecutar Gradle, estos archivos se copien automáticamente a un directorio de distribución, digamos dist, que será el lugar desde donde luego subiremos o distribuiremos nuestro proyecto.

En lugar de escribir manualmente código para copiar archivos, como abrir flujos de entrada y salida, Gradle nos facilita esta tarea con una tarea predefinida llamada Copy. Para crear una tarea de este tipo, simplemente definimos su nombre y especificamos que su tipo es Copy. Por ejemplo:

task copiar(type: Copy) {
    // configuración de la tarea
}

Esta tarea ya viene con métodos y propiedades que podemos usar para controlar qué y cómo se copian los archivos.

Antes de copiar, es buena práctica asegurarnos de que el directorio destino exista. Podemos crear una tarea llamada crearDist que se encargue de crear el directorio dist si no existe:

task crearDist {
    doLast {
        def distDir = file('dist')
        if (!distDir.exists()) {
            distDir.mkdirs()
        }
    }
}

Luego, podemos hacer que la tarea copiar dependa de crearDist, para que el directorio destino esté listo antes de copiar:

task copiar(type: Copy, dependsOn: crearDist) {
    from 'tools'
    into 'dist'
}

Aquí usamos dos propiedades fundamentales de la tarea Copy: from e into. Con from indicamos la fuente de los archivos que queremos copiar, que puede ser un directorio, un archivo específico o incluso varias fuentes. Por ejemplo, podríamos agregar varios orígenes:

from 'tools'
from 'settings.xml'
from 'readme.txt'

Con into definimos el destino donde se copiarán los archivos. En este caso, el directorio dist.

Si ejecutamos gradle copiar, Gradle copiará todo el contenido de tools al directorio dist. Si queremos que los archivos se copien dentro de un subdirectorio, podemos ajustar el valor de into para reflejar esa estructura.

Además, la tarea Copy nos permite filtrar qué archivos copiar usando las propiedades include y exclude. Con include indicamos qué archivos queremos copiar, por ejemplo, solo los archivos que terminen en .txt:

task copiar(type: Copy, dependsOn: crearDist) {
    from 'tools'
    into 'dist'
    include '*.txt'
}

Al ejecutar esta tarea, solo se copiarán los archivos .txt dentro de tools.

Por otro lado, con exclude podemos especificar qué archivos no queremos copiar. Por ejemplo, si queremos copiar todo excepto los archivos .bat y .sh, podemos hacer:

task copiar(type: Copy, dependsOn: crearDist) {
    from 'tools'
    into 'dist'
    exclude '*.bat', '*.sh'
}

Así, al ejecutar la tarea, todos los archivos excepto los que terminen en .bat o .sh serán copiados.

Estas propiedades include y exclude son complementarias y nos permiten controlar con precisión qué archivos se copian, evitando tener que escribir código complejo para filtrar manualmente.

En resumen, la tarea Copy de Gradle nos ofrece una forma sencilla y eficiente de copiar archivos y directorios, con control sobre la fuente, el destino y los filtros de inclusión o exclusión. Esto optimiza nuestro proceso de construcción y facilita la preparación de la distribución de nuestros proyectos.

Lista de reproducción
  1. 1
    Instalar Gradle
    7 minutos
  2. 2
    Creando las primeras tareas
    7 minutos
  3. 3
    Más sobre tareas
    8 minutos
  4. 4
    Cómo usar Gradle con Java
    11 minutos
  5. 5
    Creando aplicaciones con Application
    3 minutos
  6. 6
    Dependencia entre tareas
    5 minutos
  7. 7
    Más métodos de las tareas
    9 minutos
  8. 8
    Ejecución condicional con onlyIf
    5 minutos
  9. 9
    finalizedBy
    2 minutos
  10. 10
    Tareas base de Gradle
    3 minutos
  11. 11
    Tarea Copy
    6 minutos
  12. 12
    Tarea Exec
    6 minutos
  13. 13
    Tarea Zip
    5 minutos
  14. 14
    Importar en IntelliJ IDEA
    6 minutos
  15. 15
    Importar en Eclipse
    5 minutos
  16. 16
    Importar en NetBeans
    4 minutos
  17. 17
    Dependencias con Maven
    11 minutos
  18. 18
    Qué aprender ahora
    5 minutos
  19. 19
    ¿Qué es Gradle?
    6 minutos