Poco a poco todo avanza en el mundo de la programación y uno de los campos que siempre necesita de mejoras continuas es el mundo de la automatización de builds (construcciones). Todos hemos manejado estos años ant y maven para automatizar la construcción de proyectos lo máximo posible. Poco a poco Gradle se esta haciendo hueco como nueva herramienta para gestionar la automatización de los builds.
¿Qué es Gradle?
Gradle es una herramienta de automatización de la construcción de nuestro código que bebe de las aportaciones que han realizado herramientas como ant y maven pero intenta llevarlo todo un paso mas allá. Para empezar se apoya en Groovy y en un DSL (Domain Specific Language) para trabajar con un lenguaje sencillo y claro a la hora de construir el build comparado con Maven. Por otro lado dispone de una gran flexibilidad que permite trabajar con ella utilizando otros lenguajes y no solo Java. Dispone por otro lado de un sistema de gestión de dependencias sólido.
Vamos a construir un ejemplo sencillo de Gradle. Para ello el primer paso será instalarnos las herramientas de Gradle para eclipse a través del marketplace.
Realizada este primera operación podemos usar el entorno de eclipse para generarnos un proyecto de Gradle.
Seleccionamos el proyecto de QuickStart y se construye el típico proyecto de eclipse que contiene una estructura de carpetas tipo Maven.
Como podemos ver disponemos de un fichero build.gradle que es el encargado de gestionar el build y que mostramos su código a continuación.
Como podemos ver se trata de un DSL (Domain Specified Language) que es bastante compacto. En las primeras lineas registramos tres plugins que nos permitirán abordar diversas tareas.
Java Plugin: Se encarga de poner a nuestra disposición tareas del mundo java como por ejemplo la tarea “jar” de empaquetado que usamos en la linea 13.
Eclipse Plugin :Se encarga de integrar gradle dentro de eclipse y configurar un classpath basado en las dependencias que asignamos en la linea 24
Application Plugin: Se encarga de añadir las tareas de ejecución de tal forma que desde el propio gradle podamos ejecutar nuestro proyecto definiendo en la linea 11 la clase main.
Una vez tenemos definido el fichero podemos ver el contenido de la clase Principal que deseamos ejecutar.
package com.arquitecturajava; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Principal { private static final Logger logger = LogManager.getLogger(); public static void main(String[] args) { logger.error("hola, mundo"); } }
En este caso se trata de una clase que usa el API de log4j (versión2) para imprimir un mensaje de error. Para ello deberemos definir en la carpeta de resources el fichero log4j2.xml que nos configura el appender de consola.
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration>
Realizados estos pasos ya tenemos un mini proyecto y podemos usar gradle y su tarea build para construir nuestro código y generar un jar.
Realizada esta operación gradle nos generará un jar con el proyecto preparado.
De igual forma podríamos haber ejecutado la tarea :run y que gradle nos ejecutara el proyecto.
Otros artículos relacionados :
Hola, gracias por compartir este blog.
Estoy queriendo usar hibernate, y me está dando problemas al ejecutar la aplicación. El mensaje que me devuelve es
“””””
Exception in thread “main” javax.persistence.PersistenceException: No Persistence provider for EntityManager named OrderDBAccess: The following providers:
org.hibernate.jpa.HibernatePersistenceProvider
Returned null to createEntityManagerFactory.
“””””
Según lo que encontré es que el jar que tienie el proveedor de persistencia no se encuentra en el classpath.
Mi consulta sería, ¿cómo configuro gradle para que incluya lo que sea necesario al classpath?
no te se decir al final sigo usando maven
Buenas tardes, quisiera saber si usted me puede pasar algún link de un tutorial en donde enseñen a subir mi proyecto java echo con graddle y mysql?
A que te refieres con subir? subir a una nube? por ejemplo https://es.hostadvice.com/hosting-services/java/
Se podria decir que gradle es una version mejorada de Maven?
Si pero también implica aprender algo nuevo casi de cero de ahí que este costando que se imponga
Hola, no me ha quedado claro para que vale Gradle ….. ¿Podrías decir para que vale, que aporta y que funcionalidades tiene que mejoren a Maven?
Es similar a Maven pero es más flexible y no se basa en tanto xml sino en un dsl. Que permite una sintaxis más directa.
Hola, podrias poner un ejemplo por favor de como debugear java despues de ejecutar “gradle run”? Gracias y un saludo, Marcos.
Pues ahora mismo no tengo tiempo 🙁 , mira a ver si alguién te contesta y aporta algo 🙂
es en serio esa respuesta? no me parece..
Ya viste que respondía antes que de todas formas sigue usando Maven, o sea… que publicó algo que pareciera copy&paste porque habla de sus pros y cons, pero no lo ha adoptado, he ahí el por qué la falta de tiempo…
Ojala las cosas fueran más sencillas .Cuando publiqué el articulo de Gradle parecía que tendría un futuro brillante. Hoy se usa , pero lo usa mucho la gente de Android. Yo estoy más ligado a la plataforma Java EE y sigo usando Maven y Spring Boot.
Hola Cecilio, en tu opinión considerarías que gradle va a dejar obsoleto a maven?
saludos.
Es probable pero pasará tiempo hasta que eso ocurra.. hoy por hoy maven esta muy extendido
Hola:
Muy buena la explicación, entiendo entonces que al momento de almacenar el archivo build.gradle, las dependencias se incrustan el el classpath y podemos hacer referencia a las mismas dentro del proyecto, es posible agregar jars propios? he observado que algunas personas utilizan Gradle + maven, a tu punto de vista, ¿es valido? .
Saludos !!!!
PD. Sobre el libro de Angular, ¿Se encuentra en la plataforma de Google? Es que no logro encontrarlo.
No he conseguido publicarlo en google han cambiado algo el formato y me dice que es incompatible 🙁 . Lo volveré a intentar en cuanto actualice mi software
Lo que existe es un plugin de maven para utilizar algunas características especiales de maven dentro de gradle