sábado, 7 de noviembre de 2015

Proyectos Gradle en Eclipse usando Buildship

Introducción

En posts anteriores se ha venido hablando de Gradle y desarrollando algunos ejemplos usando comandos (Terminal/Consola). Dado que en el desarrollo de aplicaciones con Java lo más común es apoyarse en un IDE, en este post se mostrará cómo usar el nuevo plugin para Eclipse desarrollado por los mismos creadores de Gradle: Buildship.

Instalación

La manera más fácil y recomendada de instalar Buildship en Eclipse es mediante "Eclipse Marketplace" (menú Help -> Eclipse Marketplace).

Figura 1 - Buildship en Eclipse Marketplace

Creación de un Nuevo Proyecto

Luego de seguir los pasos del proceso de instalación y reiniciar Eclipse ya será posible crear nuevos proyectos usando Gradle:

Figura 2 - Nuevo proyecto Gradle

El proceso de creación del proyecto permitirá indicar si se utilizará el wrapper de Gradle o alguna instalación específica. Como se indicó en un post previo, es recomendable usar el wrapper.

Figura 3 - Seleccionar versión de Gradle

Al completar los pasos para la creación del proyecto se tendrá la siguiente estructura de archivos:

Figura 4 - Proyecto Gradle creado en Eclipse

Como puede verse en la imagen anterior, el archivo "build.gradle" se está mostrando en un editor de texto sencillo, sin sintaxis coloreada (Syntax highlighting). Esto es algo que ya tienen presente los desarrolladores de Buildship y se encuentra documentado en sus historias de usuario, junto con otras funcionalidades, aunque aún no se define un marco de tiempo para su desarrollo.

Entre tanto lo que puede hacerse es instalar adicionalmente el plugin "Minimalist Gradle Editor":

Figura 5 - Instalando Minimalist Gradle Editor

Una vez instalado aparecerá una nueva opción en el menú contextual "Open With" llamada "Minimalist Gradle Editor":

Figura 6 - Abrir con Minimalist Gradle Editor

Figura 7 - Archivo abierto con Minimalist Gradle Editor

JCenter

Como se puede ver en el archivo "build.gradle", en la sección de repositorios (repositories) no aparece "mavenCentral()" como quizás algunos estaban acostumbrados, sino que en su lugar ahora está "jcenter()". En resumen, JCenter es un repositorio Maven el cual no solamente ya contiene las librerías en Maven Central sino también las de otros repositorios de librerías que, generalmente por decisión de sus desarrolladores, se conservan en repositorios aparte.

Adicional a esto, JCenter cuenta con un búsqueda optimizada de librerías (lo cual consume menos memoria al buscar dependencias en los proyectos), conexión HTTPS (para brindar mejor seguridad), entre otras características.

Este repositorio ganó mucha popularidad cuando Google decidió que este sería el repositorio por defecto para el plugin Gradle de Android en Android Studio. Más información puede verse en: http://www.technotalkative.com/android-studio-migration-maven-central-jcenter/

Ejecutando Tareas de Gradle

Vistas "Gradle Tasks" y "Gradle Executions"

Buildship adiciona a Eclipse las vistas "Gradle Tasks" y "Gradle Executions". En la primera aparece el listado de las tareas disponibles para ejecutar en el proyecto, igual al resultado de ejecutar la tarea "tasks".

Figura 8 - Vista Gradle Tasks

Al hacer doble clic en alguna de las tareas, o seleccionarla mediante clic derecho "Run Gradle Task", se ejecutará la tarea y su resultado se mostrará en las vistas "Gradle Executions" y "Console". Como valor agregado de "Gradle Executions" se tiene la opción de cancelar la ejecución de una tarea en proceso y ver el resultado de ejecuciones previas mediante los botones de su barra superior.

Nota: "Gradle Executions" sólo funciona cuando el proyecto usa Gradle 2.4 ó superior.

Figura 9 - Tarea ejecutada en Gradle Executions

Figura 10 - Tarea ejecutada en Console

Run Configurations

También es posible ejecutar tareas desde esta opción, haciendo clic derecho sobre el proyecto y seleccionando en el menú contextual "Run As" -> "Run Configurations".

Figura 11 - Ventana Run Configurations con Gradle

En el campo "Gradle Tasks" de la pestaña "Gradle Tasks" (sí, se llaman igual) se indican las tareas que se quieren ejecutar y opcionalmente en la pestaña "Arguments" se pueden ingresar los parámetros que dichas tareas puedan necesitar.

Una vez ejecutada la tarea desde "Run Configurations" esta queda disponible desde la opción "Run" de Eclipse para mayor comodidad.

Figura 12 - Tarea de Gradle desde Run

Actualizar el Proyecto Gradle

Luego de modificar alguno de los archivos de Gradle en el proyecto (por ejemplo agregar una dependencia en "build.gradle"), se debe actualizar la configuración de Gradle haciendo clic derecho sobre el proyecto y seleccionar "Gradle" -> "Refresh Gradle Project".

Figura 13 - Refrescar proyecto Gradle

Figura 14 - Nueva dependencia en el proyecto

Importar un Proyecto Gradle

Mediante Buildship no solamente es posible crear proyectos Gradle nuevos, sino también importar los que se hayan desarrollado previamente mediante la opción "File" -> "Import" -> "Gradle" -> "Gradle Project":

Figura 15 - Importando un proyecto Gradle

Al finalizar la importación, el proyecto queda disponible en el workspace de Eclipse y, usando como ejemplo el proyecto con Retrofit desarrollado en otro post, puede verse que las tareas de los plugins "release" y "application" aparecen en "Gradle Tasks", junto con todas las demás.

Figura 16 - Proyecto Gradle importado

Depurar una aplicación Java (Debug)

Las opciones "Run" y "Debug" de Eclipse funcionan normalmente al aplicarlas sobre una clase que tenga un método "main", sin embargo en algunas ocasiones se tienen tareas de Gradle que se requieren ejecutar para ejecutar el proyecto, por ejemplo copia de archivos, reemplazo de variables, etc. Infortunadamente las opciones "Run" y "Debug" de Eclipse simplemente ejecutan la aplicación sin tener en cuenta dichas tareas de Gradle.

Desde la vista "Gradle Tasks" se puede ejecutar la tarea "run" para los proyectos que usen el plugin "application", como es el caso del proyecto "retrofit-example" que se importó previamente. De esta manera es posible ejecutar la aplicación teniendo en cuenta todas las tareas de Gradle necesarias, sin embargo aún no permite ejecutarla en modo debug.

Para ejecutar una tarea de Gradle en modo debug debe agregarse el parámetro "--debug-jvm", lo cual puede hacerse cuando se ejecuta desde la consola/terminal o desde la opción "Run Configurations" de Eclipse.

Figura 17 - Tarea Gradle en modo Debug desde Eclipse

Al ejecutar la tarea con ese parámetro se compila el proyecto pero la ejecución se detiene, esperando que un proceso de debug se conecte al puerto 5005.

:compileJava
:processResources
:classes
:run
Listening for transport dt_socket at address: 5005

En Eclipse se tiene la opción de iniciar un proceso de debug que se conecte al puerto que se necesite. Para ello se debe seleccionar "Debug Configurations" -> "Remote Java Application" desde la opción "Debug".

Figura 18 - Debug Configurations señalando la opción Debug

Figura 19 - Ventana Debug Configurations

Figura 20 - Aplicación en punto de interrupción (breakpoint) en Eclipse

Nota: En caso de que al llegar al breakpoint en Eclipse no se muestre el código de la clase, se debe terminar esa ejecución, iniciar una vez la aplicación usando la opción "Debug" de Eclipse y al intentar de nuevo usando la tarea de Gradle y el debug remoto de Eclipse ya debe aparecer el código.

Conclusiones

Buildship aún carece de varias características que lo hagan una integración ideal entre Eclipse y Gradle, quienes usen Android Studio (o IntelliJ IDEA) ya disfrutan no solamente de sintaxis resaltada sino también validaciones y auto-completado.

De hecho, los desarrolladores de Spring también hicieron un plugin de Gradle para Eclipse (Gradle Integration for Eclipse), el cual se lanzó antes que Buildship, así que si a eso se suma el que la empresa detrás de Gradle ahora haga parte de Eclipse Foundation y tenga un plugin oficial desarrollado por ellos mismos dan una buena señal para quienes aún usamos Eclipse.

Referencias

https://gradle.org/eclipse
https://eclipse.org
https://docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html
http://www.ibm.com/developerworks/library/os-eclipse-javadebug

Más sobre Gradle

http://nombre-temp.blogspot.com/2016/01/tutorial-gradle.html

No hay comentarios.:

Publicar un comentario