Gradle

En el artículo Evolución de build tools, se hizo mención a gradle como una de las build tools emergentes en los últimos años. Gradle ha tenido el título de La siguiente generación de build automation y dependency management, gracias a su simplicidad ha sido adoptado rápidamente entre los desarrolladores.

Gradle es una build automation tool y está implementada en Java. Nos permite crear nuestro script haciendo uso de Groovy y provee un DSL (Domain Specific Language), el cual brinda legibilidad y simplicidad. Actualmente brinda compatibilidad con otro lenguaje recién llegado a la JVM, me refiero a Kotlin. Al igual que ant tiene su build.xml, maven su pom.xml, gradle tiene un archivo llamado build.gradle donde definimos los plugins, dependencias, tareas a utilizar.

La última versión estable a la fecha es 3.2.1.

A comparación de maven, con unas cuantas líneas podemos expresar y tener las mismas característas en gradle.

apply plugin: 'java'

group = 'me.eddumelendez.demo'
artifactBaseName = 'gradle-demo'
version = '1.0-SNAPSHOT'

repositories {
  mavenCentral()
}

dependencies {
  testCompile 'junit:junit:4.12'
}

Como podemos apreciar en el script anterior, hemos definido todo lo necesario para empezar con nuestro proyecto gradle de una manera declarativa y fácil de entender. Y en pocas líneas!

Iniciando un proyecto con Gradle

Como se mencionoó anteriormente, gradle brinda soporte para ser la build tool de diferentes lenguajes de programación. A continuación, veremos el trabajo de la tarea init:

  • Para crear un proyecto Java debemos especificar el parámetro --type, por defecto usará JUnit como framework de testing

    gradle init --type java-library

    Si deseamos usar Spock o Testng podemos indicarle un parámetro adicional --test-framework

    gradle init --type java-library --test-framework spock
  • También, podemos dar inicio a un proyecto en Scala, por defecto usará ScalaTest como framework de testing

    gradle init --type scala-library
  • Finalmente, podemos dar inicio a un proyecto en Groovy, por defecto usará Spock como framework de testing

    gradle init --type groovy-library

Migrando desde Maven

Si actualmente cuentas con un proyecto maven y deseas migrarlo a gradle, lo único que tienes que ejecutar es:

gradle init

Al ejecutar la tarea init, una tarea en incubación, se debe tener cuidado ya que la migración cuenta con limitaciones. Por ejemplo, migrar la configuración de plugins de maven debe ser una tarea ha realizar de forma manual ya que estos no cuentan con un equivalente en gradle. Como podrás notar durante tu experimentación gradle aplicará los plugins correspondientes al tipo de proyecto y dependencias con sus scopes respectivos.

Buenas Prácticas

  • Usar gradle wrapper

  • Usar daemon para builds en desarrollo

    • Gradle 1.x y 2.x tienen el daemon inactivo por defecto

    • Gradle 3.x tiene el daemon activo por defecto

Para obtener ayuda en el proyecto, podemos ejecutar el siguiente comando:

gradle help

En gradle, para poder listar todas las tareas con las que se cuentan en el proyecto podemos ejecutar:

gradle tasks

Eddú Meléndez

Java Software Engineer, Open Source Contributor