Construccion de proyectos con gradle

  • View
    382

  • Download
    4

Embed Size (px)

DESCRIPTION

Estas son las slides que utilicé en la charla de la reunión de Septiembre de 2014 del GDG de Madrid. Desde hace tiempo, los desarrolladores venimos utilizando scripts para automatizar y facilitarnos la construcción automática de nuestros proyectos. En los intentos de estandarización de esos Scripts, la primera herramienta fue Ant, muy flexible, pero muy tediosa por lo verboso y por que siempre había que empezar desde cero. La llegada de Maven supuso una cierta convención en las tareas y fases de construcción de un proyecto. Pero también incluía una tremenda facilidad para la gestión de librerías y dependencias. A cambio, impone una cierta rigidez en la estructura del script. Gradle ha venido a buscar lo mejor de los dos mundos: la fexibilidad de Ant, la convención de Maven, la gestión de librerías de Ivy o Mvn.... y todo ello con un lenguaje de scripting más parecido al código que al XML en el que se basan las dos precedesoras. Desde hace meses, Google ya ha apostado por Gradle como sistema de construcción de proyectos para Android en su Android Studio. En esta charla, haremos una introducción a Gradle como herramienta de construcción de proyectos.

Text of Construccion de proyectos con gradle

  • 1. Construccin de proyectos con David Gmez G. @dgomezg
  • 2. Automatizar la construccin Pur qu? Evitar empaquetado manual Construir rpidamente y en cualquier entorno Builds programadas (C.I.) Foto de Steindy http://commons.wikimedia.org/wiki/File:Jose_Mourinho_-_Inter_Mailand_(7).jpg
  • 3. Herramientas Fichero de descripcin + Cdigo fuente + Gestin de dependencias = Artefacto
  • 4. Caractersticas Basado en Java Configuracin basada en XML Gestor de dependencias adicional (Ivy) Muy flexible Todas las tareas se definen especficamente
  • 5. Pegas Muy verboso. XML muy extensos Difcil escribir lgica compleja (condiciones) Estructura de proyecto libre. Difcil de mantener Difcil de entender el proceso de construccin.
  • 6. Ejemplo
  • 7. Ejemplo ! !
  • 8. Ejemplo ! ! dolamroth:ant-sample dgomezg$ ant clean compile jar run Buildfile: /Users/dgomezg/Documents/workspace/ant-sample/build.xml ! clean: ! compile: [mkdir] Created dir: /Users/dgomezg/Documents/workspace/ant-sample/ build/classes [javac] Compiling 1 source file to /Users/dgomezg/Documents/ workspace/ant-sample/build/classes ! jar: [mkdir] Created dir: /Users/dgomezg/Documents/workspace/ant-sample/ build/jar [jar] Building jar: /Users/dgomezg/Documents/workspace/ant-sample/ build/jar/HelloWorld.jar ! run: [java] Hello World ! BUILD SUCCESSFUL Total time: 1 second dolamroth:ant-sample dgomezg$
  • 9. Caractersticas Convencin sobre configuracin Estructura de proyecto determinada Proceso de construccin definido Gestor de dependencias Informes de construccin y de test Arquetipos Ampliable con Plugins (Mojos)
  • 10. Pegas Estructura demasiado rgida Extensin complicada Fichero de build verboso Especialmente si configuramos plugins
  • 11. Ejemplo
  • 12. Ejemplo 4.0.0com.autentia.dgomezg.sandboxmvn-sample1.0.0
  • 13. Ejemplo 4.0.0com.autentia.dgomezg.sandboxmvn-sample1.0.0 dolamroth:mvn-sample dgomezg$ mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building mvn-sample 1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ mvn-sample --- [debug] execute contextualize [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ mvn-sample --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ mvn-sample --- [debug] execute contextualize [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ mvn-sample --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.10:test (default-test) @ mvn-sample --- [INFO] Surefire report directory: /Users/dgomezg/Documents/workspace/mvn-sample/target/surefire-reports ! ------------------------------------------------------- T E S T S ------------------------------------------------------- ! Results : ! Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 ! [INFO] [INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ mvn-sample --- [INFO] Building jar: /Users/dgomezg/Documents/workspace/mvn-sample/target/mvn-sample-1.0.0.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.876s [INFO] Finished at: Wed Nov 20 13:32:06 CET 2013 [INFO] Final Memory: 7M/245M [INFO] ------------------------------------------------------------------------ dolamroth:mvn-sample dgomezg$
  • 14. Qu se puede mejorar? Ficheros de build ms concisos Convencin para estructura Flexibilidad para requisitos Builds incrementales Reutilizacin de partes del script Soporte para implementar lgica
  • 15. Caractersticas Flexibilidad Definicin de nuevas tareas Gestor de dependencias (Ivy) Convencin sobre configuracin Multi-Mdulo Plugins Gestor de dependencias
  • 16. Caractersticas Basado en Groovy Lenguaje completo Permite definir lgica ms compleja Convenciones Flexibles Extensibilidad Integracin con Ant (AntExecutor) y maven
  • 17. Ejemplo
  • 18. Ejemplo build.gradle
  • 19. Ejemplo build.gradle apply plugin: 'java' ! group = 'com.autentia.dgomezg.sandbox' archivesBaseName = 'gradle-sample' version = '0.1.0-SNAPSHOT' !
  • 20. Ejemplo apply plugin: 'java' ! group = 'com.autentia.dgomezg.sandbox' archivesBaseName = 'gradle-sample' version = '0.1.0-SNAPSHOT' ! dolamroth:gradle-sample dgomezg$ gradle build :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :jar :assemble :compileTestJava UP-TO-DATE :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test :check :build ! BUILD SUCCESSFUL ! Total time: 2.375 secs dolamroth:gradle-sample dgomezg$ build.gradle
  • 21. Ejemplo build.gradle apply plugin: 'java' ! group = 'com.autentia.dgomezg.sandbox' archivesBaseName = 'gradle-sample' version = '0.1.0-SNAPSHOT' ! dolamroth:gradle-sample dgomezg$ gradle build :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :jar :assemble :compileTestJava UP-TO-DATE :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test :check :build ! BUILD SUCCESSFUL ! Total time: 2.375 secs dolamroth:gradle-sample dgomezg$ sourceCompatibility = 1.6 ! jar { manifest { attributes 'Main-Class': 'com.autentia.dgomezg.sandbox.gradle.HelloWorld' } }
  • 22. Fundamentos Gradle
  • 23. El proceso
  • 24. La lista de tareas gradle tasks o gradle tasks --all
  • 25. Groovy DSL Todo tiene un equivalente en clases java http://gradle.org/docs/current/javadoc/index.html
  • 26. Groovy DSL Mayor flexibilidad a la hora de definir nuevas tareas