Cribble Crabble Gradle: Auto-Build Magic

Los desarrolladores hacen la vida más fácil para las personas, mientras que Gradle lo hace más fácil para los desarrolladores. Si estás escribiendo en Android, este artículo es para ti. Lea sobre qué tipo de bestia es este Gradle (spoiler: él es un elefante), y cómo trabajar con él.


Gradle es un sistema de compilación automático que se utiliza para simplificar el trabajo con Java. Usando herramientas estandarizadas (condicionalmente), ayuda a los desarrolladores a construir el producto correcto sin perder su singularidad. Después de todo, el proceso de trabajar con Gradle no es solo la elección de una plantilla. Pero lo primero es lo primero.


imagen


Dónde descargar Gradle


Puedes descargar Gradle en el sitio web oficial . Recomendamos descargar e instalar todo manualmente (para que la vida no parezca frambuesa). Para obtener instrucciones y todos los enlaces necesarios, consulte Instalación de Gradle> Instalación manual . Por cierto, recomendamos leer todo. Eso es todo En serio


En esta página debe seleccionar la versión del sistema y hacer clic en "solo binario". Luego, descomprima el archivo zip y configure la variable de entorno PATH como se describe en las instrucciones. Si todo se hace correctamente, después de la instalación, el comando gradle -v debería mostrar la versión del sistema seleccionado.


A veces resulta que durante la definición, el sistema encuentra a Gradle en un lugar inesperado. En Windows, esto se resuelve de la siguiente manera:
para% i en (gradle.bat) do echo . % ~ $ RUTA: i


Cómo trabajar con Gradle


Gradle no es una plataforma específica. Además, el sistema utiliza diferentes lenguajes de programación. Los más populares son Groovy DSL y Kotlin (pero puedes escribir en otros). La primera opción se utilizará en el artículo, ya que este es el lenguaje de descripción de tareas estándar en Gradle.


Antes de comenzar, preste atención a los términos: "tarea" y "complemento", nuevamente. Después de todo, todo el trabajo con el sistema se basa en ellos. Los complementos proporcionan y crean tareas. Las tareas son las acciones que deben hacerse. Todo es muy sencillo.


Puede leer más sobre esto en las instrucciones del complemento: JavaCompile (agregar nuevas tareas), SourceSet (agregar nuevos objetos de dominio). Los complementos también funcionan con convenciones y extienden objetos. Por ejemplo, usando el complemento, puede agregar nuevos elementos DSL y / o configurarlos.


El conjunto "Complementos principales" se crea automáticamente cuando instala Gradle. En las primeras etapas, se recomienda usar la categoría "Utilidad", es decir, el complemento "Build Init Plugin". Proporciona tareas para inicializar un proyecto en el sistema. Puede seleccionar el tipo de proyecto de la lista en el sitio.


Que sea la aplicación java .
Tarea: gradle init --type java-application


Después de eso, aparecerán nuevos archivos en la carpeta. Entre ellos:


  • la carpeta gradle (atención, no .gradle) y el archivo gradlew.bat son envoltorios, envoltorios;
  • Archivo build.gradle: un script donde se indican bibliotecas, marcos, complementos y tareas de un proyecto específico.

El último archivo mostrará la sección del complemento. Este complemento ya tiene tareas adjuntas. Su lista se puede ver usando el comando de tareas de gradle.


Las tareas


Se muestra en bloques por sus funciones. Cada uno recibe una breve descripción. La comprensión requiere el conocimiento de inglés en un nivel básico. Si no está en este grupo, cualquier traductor lo hará. No hay construcciones de lenguaje complejas en build.gradle.


Después de seleccionar una tarea y su finalización exitosa, verá una inscripción verde "CONSTRUIR CON ÉXITO" en la parte inferior. Esto significa que (tienes suerte) todo salió bien. También en la parte inferior del sistema dará un breve informe.


Si el estado es "ejecutado", la tarea se ha completado realmente. Si está "actualizado" - no. Esto no significa que haya ocurrido algún tipo de falla. En el caso de tal estado, la tarea no requiere una solución en principio, es decir, su objeto ya está actualizado.


Esto sucedió porque Gradle generó automáticamente " Verificaciones actualizadas ", una compilación incremental cuyo propósito es optimizar el sistema. Por lo tanto, las tareas que ya se completaron o que no requieren acción no se están resolviendo.


Puede deshabilitar esta compilación. Manualmente Para hacer esto, debe completar la tarea con el indicador --rerun-task. Si todo se hace correctamente, el estado de todas las tareas cambiará a "ejecutado".


Gradle también le permite ver registros en diferentes niveles. Por ejemplo, el comando gradle run -i le permitirá leer mensajes informativos sobre el funcionamiento del sistema, el comando run -q habilitará el modo silencioso, run -d mostrará todos los mensajes de registro, etc. Aquí puede encontrar una lista completa de registros e información adicional sobre el sistema de registro.


Dependencias


Gestión de dependencias: especifica las bibliotecas o los marcos que necesita el proyecto. Gradle debe incluir estas dependencias en algún momento para poder construir la aplicación correctamente (o en general) al final. El comando gradle init para la aplicación java en el script de compilación invoca automáticamente información sobre 2 configuraciones.


La implementación es responsable de la transitividad: sus dependencias serán invisibles para los usuarios. TestImplementation extiende la configuración previa. Por lo tanto, trabajan en conjunto.


Para comprender mejor las dependencias y cómo trabajar con ellas, lea el capítulo " Gestión de configuraciones de dependencias " en el manual oficial. Por cierto, la " separación de API e implementación " explica en detalle sobre la API y la implementación, así como la diferencia entre ellas.


Si necesita incluir la dependencia en el artefacto final, debe especificar toda la información necesaria para el manifiesto del archivo jar en la configuración de la tarea jar. Cómo hacerlo bien, puede ver, por ejemplo, aquí .


A continuación, debe incluir las dependencias en el jar. Esto es necesario para la compilación.
Demasiado complicado? Use el " Complemento de Gradle Shadow ".


El comando gradle --console plain dependencies muestra una lista de todas las configuraciones y sus dependencias en una lista. El sistema también ofrece a los desarrolladores un filtro que excluye las dependencias de la lista (gradle - console plain dependencies | find "-"), algunas son más convenientes.


Los tipos de dependencias más comunes:


  • externo: cargado desde repositorios externos;
  • diseño: depende del módulo en un proyecto específico;
  • archivo: están conectados como archivos jar o aar.

¿Cuál de estos usar, decide el desarrollador?
Para Java, todo está bien definido en la gestión de dependencias .


Trucos de la vida


A pesar de que Gradle es un sistema popular y relevante de ensamblaje automático, muchas personas tienen problemas con él. Aquí hay algunas sugerencias que pueden facilitarle la vida a un desarrollador de Android:


  1. Usa la consola. Encontrar comandos a veces es problemático, y cuando cambia build.gradle, el sistema puede fallar o, en general, recargar el proyecto. Por lo tanto, los expertos recomiendan llamar a Gradle directamente desde la consola.

    Vrapper generalmente va con el proyecto. Se puede acceder directamente a Linux y macOS. En Windows, llame a un archivo bat en lugar de un contenedor.


  2. Gradle almacena el caché durante 1 día. Esto puede ser reconfigurado. Necesitas editar el código:


    // build.gradle configurations.all { resolutionStrategy.cacheChangingModulesFor -  , 'hours' resolutionStrategy.cacheDynamicVersionsFor -  , 'minutes' } 

  3. - –refresh-dependencies: un comando útil que comenzará a actualizar todas las dependencias en Gradle. Puede ser útil si algunos datos en el caché están dañados, como se verifica. Es conveniente usarlo si los datos de la memoria caché están dañados, ya que se verifican y actualizan (si son diferentes).


  4. Utilice CI (Integración continua) cuando trabaje con un sistema de compilación automático. Deje que se ejecuten pruebas unitarias para todos los commits. Además, los expertos recomiendan pruebas de unidad de conexión. Esto se puede hacer en Android Studio.

    Esta combinación detectará errores antes. Y aunque ralentizará el proceso de inicio, el desarrollador podrá relajarse en el futuro. Así que la vida piratea para el futuro.


  5. Intenta nuevamente. Miedo (Nosotros también) En realidad, la sincronización no siempre necesita reiniciarse de inmediato. Primero, los expertos recomiendan verificar el sistema como un todo. Por ejemplo, utilizando cualquier comando simple, esto ayudará a comprender cuáles son las posibilidades de éxito para la próxima sincronización.


  6. Configure su entorno de desarrollo IntelliJ IDEA con Gradle. Esto optimizará el proceso de trabajo, así como también usará la lista mágica.


  7. Consejo para aquellos que trabajan con Gradle desde la línea de comandos de Android Studio. Verifique el error "Iniciando un Gradle Daemon, 1 incompatible no se pudo reutilizar" (# 68374709). Este es un flagelo de un sistema que los desarrolladores aún no han solucionado.



Uno de los principales problemas de Gradle es "Falló la construcción de Gradle". Podemos hacerlo sin palabras innecesarias si ya lo sabes. Si no, buena suerte.


imagen


Sin embargo, el principal problema de Gradle es diferente. El tiempo que lleva construir el sistema ha sido durante mucho tiempo una leyenda (muy triste) en círculos especializados. Es imposible acelerar el trabajo, al menos no significativamente.


Entonces tienes que esperar de todos modos.


Puede, por ejemplo, volar en algún lugar al espacio, como en Interestelar.


imagen


Conclusión


Gradle es una buena solución, a pesar de todas las desventajas. El ensamblaje automático le ahorrará tiempo y energía (no importa cuán irónico suene después del párrafo anterior). Y también, para que su aplicación sea más limpia. El sistema notará cualquier error y no le permitirá finalizar el trabajo hasta que se solucione (a cualquier costo).


Source: https://habr.com/ru/post/473642/


All Articles