Gradle
jueves, junio 11, 2015 at 9:47PM
jcarmonaloeches in Gradle

gradleGradle es una herramienta de gestión de software, que copia y combina las partes de Ant y Maven, construyendo encima de ellas con DSL y otras mejoras.

Tiene la potencia de Ant, así como la flexibilidad del ciclo de vida de Maven, y es fácil de usar. El resultado final es una herramienta que se publicó en 2012 y ganó mucha atención en un período corto de tiempo. Por ejemplo, Google adoptó Gradle como la herramienta de construcción por defecto para Android OS.

Gradle no usa XML. En su lugar, tiene su DSL basado dentro de Groovy (uno de los lenguajes de la JVM). Como resultado, Gradle contruye scripts muchos más cortos que aquellos construidos con Ant o Maven. La cantidad de código es mucho más pequeño con Gradle, desde que su DSL esta diseñado para resolver problemas específicos: mover software a través de su ciclo de vida, desde compilar a través de análisis estáticos y testear, empaquetar y desplegar.

Inicialmente, Gradle usó Apache Ivy para su gestión de dependencia. Posteriormente movió su ingeniería de resolución de dependencias a una propia nativa.

Un ejemplo de fichero de configuración es el siguiente:

description = 'Tapestry Project'
version = '0.0.1'

apply plugin: 'eclipse'
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'war'

// Propiedades de configuración
//Eclipse
downloadJavadoc = true

// Java
sourceCompatibility = 1.6

repositories { 
 flatDir name: 'Local', dirs: 'misc/lib'
 mavenRepo name: 'Apache (Staging)', url: 'https://repository.apache.org/content/groups/staging/'
 mavenRepo name: 'JBoss', url: 'https://repository.jboss.org/nexus/content/repositories/releases/'
 mavenRepo name: 'Java', url: 'http://download.java.net/maven/2/'
    mavenCentral()
}

dependencies {
 compile 'org.apache.tapestry:tapestry5-annotations:5.3.2'
 compile 'org.apache.tapestry:tapestry-core:5.3.2'
 compile 'org.apache.tapestry:tapestry-beanvalidator:5.3.2'
 compile 'org.apache.tapestry:tapestry-hibernate-core:5.3.2'
 compile 'org.apache.tapestry:tapestry-hibernate:5.3.2'
 compile 'org.apache.tapestry:tapestry-func:5.3.2'
 compile 'org.apache.tapestry:tapestry-ioc:5.3.2'
 compile 'org.apache.tapestry:tapestry-javadoc:5.3.2'
 compile 'org.apache.tapestry:tapestry-jmx:5.3.2'
 compile 'org.apache.tapestry:tapestry-json:5.3.2'
 compile 'org.apache.tapestry:tapestry-test:5.3.2'
 compile 'org.apache.tapestry:tapestry-upload:5.3.2'
 compile 'org.apache.tapestry:tapestry-yuicompressor:5.3.2'

 compile 'org.hibernate:hibernate-core:3.6.8.Final'
 compile 'org.hibernate:hibernate-ehcache:3.6.8.Final'
 compile 'org.hibernate:hibernate-validator:4.2.0.Final'

 compile 'org.quartz-scheduler:quartz:2.1.0'
 compile 'org.freemarker:freemarker:2.3.18'
 compile 'org.apache.commons:commons-lang3:3.0'

 providedCompile 'javax.servlet:servlet-api:2.5'
 providedCompile 'javax.mail:mail:1.4.4'

 groovy 'org.codehaus.groovy:groovy-all:1.8.3'

 // Test
 testCompile 'junit:junit:4.8.2'
 testCompile 'net.sourceforge.htmlunit:htmlunit:2.9'

 testCompile 'org.mockito:mockito-all:1.9.0'
}

El nº de líneas de este fichero, es mucho menor que el nº de líneas que ocuparía el POM de Maven.

Por otro lado, en Ant, tenemos el problema de que no se desarrolló pensando en hacer uso de repositorios externos que gestionarán las librerías, aunque con Ivy podríamos suplir esta carencia. Maven añadió esta característica, y Gradle, parece, aprende de ambos, e introduce mejoras: menor cantidad de líneas por fichero.

La primera ventaja que se puede ver es que el fichero de configuración es más manejable, es cierto que, en caso de ficheros grandes, esto es una ventaja. Además, permitiría la edición sencilla desde un editor de texto plano, sin necesidad de depender de herramientas visuales para mejorar su gestión, que cargan la memoria del sistema.

Por otro lado, en otros enlaces de la web, se indica lo siguiente: desde un proyecto de Maven no es posible generar dos jars diferentes, esto obliga a que, para ello, tengas que definir dos proyectos de Maven, lo cual hace la estructura rígida (me hace pensar que considerar a Maven rígido, es ciertamente que el nivel de frikismo, en el buen sentido, de Graddle supera las expectativas conservadoras que he ido desarrollando en mi vida profesional). Graddle parece más flexible en ese sentido.

¿Qué es DSL?

Lenguaje específico de dominio (DSL) basado en Groovy en lugar de la forma más tradicional de declarar la configuración del proyecto con XML

Gradle effort can be summed as “convention is good and so is flexibility”.

Article originally appeared on javaHispano (http://www.javahispano.org/).
See website for complete article licensing information.