sábado, 21 de noviembre de 2015

Proyectos Gradle en Eclipse usando Gradle Integration for Eclipse

Introducción

En un post anterior se mostró cómo utilizar Buildship para trabajar con proyectos Gradle en Eclipse. En esta ocasión se mostrará el plugin "Gradle Integration for Eclipse" el cual lleva un poco más de tiempo desarrollado por Pivotal (la empresa que también desarrolla Spring Framework) y puede considerarse más maduro y estable.

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 - Gradle Integration for Eclipse en el 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

Luego se debe indicar el nombre del nuevo proyecto y seleccionar la plantilla de ejemplo (sample) para que el plugin cree la estructura inicial del proyecto. En este caso se seleccionará "Java Quickstart" no solamente por ser el más sencillo, sino porque en últimas será uno de los más usados. Más información sobre las plantillas disponibles se puede encontrar en: https://github.com/spring-projects/eclipse-integration-gradle/wiki/New-gradle-project-wizard

Figura 3 - Nuevo proyecto 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). Ante esta situación la comunidad detrás de "Gradle Integration for Eclipse" recomienda 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

El archivo "build.gradle" que genera "Gradle Integration for Eclipse" tiene algunas diferencias con respecto al generado por "Buildship", pero ambos permiten modificar a gusto (o necesidad) este archivo. Así por ejemplo cada quien es libre de usar Maven Central, JCenter o cualquier otro repositorio de dependencias adicional.

Ejecutando Tareas de Gradle

Vista "Gradle Tasks"

"Gradle Integration for Eclipse" adiciona a Eclipse la vista "Gradle Tasks", la cual puede mostrarse usando el menú "Window" -> "Show View" -> "Other" -> "Gradle" -> "Gradle Tasks", o también desde el "Quick Access" de Eclipse.

Figura 8 - Vista Gradle Tasks desde Quick Access

Figura 9 - Vista Gradle Tasks

Como se ve en la figura 9, en esta vista aparece el listado de las tareas disponibles para ejecutar en el proyecto, igual al resultado de ejecutar la tarea "tasks".

Al hacer doble clic en alguna de las tareas, o seleccionarla y usar la opción "Run a task" de la vista, se ejecutará la tarea y su resultado se mostrará en la vista "Console".

Figura 10 - Tarea de Gradle build ejecutada

Nota: Las advertencias (warnings) que aparecen se deben a que el archivo "build.gradle" indica que se compile usando Java 1.5 (ó 5), pero en esta prueba se tiene Java 8. Pueden ignorarse sin problemas.

Tasks Quick Launcher

Esta opción está disponible en el menú contextual, haciendo clic derecho sobre el proyecto, seleccionando "Gradle" -> "Tasks Quick Launcher".

Figura 11 - Tasks Quick Launcher en el menú contextual

Esta opción permite ingresar el nombre de la tarea de Gradle que se quiera ejecutar e inclusive tiene auto-completado para las tareas y muestra su descripción.

Figura 12 - Seleccionando la tarea en Tasks Quick Launcher

External Tools 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" -> "Gradle Build...". La opción "Gradle Build" ejecuta la más reciente tarea de Gradle.

Figura 13 - Abriendo External Tools Configurations de Gradle

Figura 14 - Creando una nueva configuración

Como se ilustra en la figura 14, esta ventana es muy similar a "Tasks Quick Launcher", con la diferencia de que estas configuraciones quedan almacenadas en Eclipse posibilitando tener tanto como se necesiten (indicando nombres diferentes para cada configuración) y ejecutarlas desde la opción "Run external tools".

Figura 15 - Tarea de Gradle desde Run external tools

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, seleccionar "Gradle" y escoger una de las opciones disponibles, según se necesite: "Refresh Dependencies", "Refresh Source Folders" o "Refresh All".

Figura 16 - Opciones para actualizar el proyecto Gradle

Figura 17 - Dependencias administradas por Gradle

Cabe anotar que a diferencia de Buildship, con el grupo "Project and External Dependencies", en el grupo "Gradle Dependencies" de este plugin se muestran las dependencias en orden alfabético, lo cual facilita la revisión de las mismas.

Importar un Proyecto Gradle

Mediante "Gradle Integration for Eclipse" 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 18 - Importando un proyecto Gradle

Para continuar con la importación se debe seleccionar su ubicación en el sistema de archivos y luego usar la opción "Build Model" para que el plugin verifique que en efecto se trata de un proyecto Gradle.

Figura 19 - Importando un proyecto luego de usar Build Model

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 20 - 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, usando "Tasks Quick Launcher" o desde la opción "External Tools Configurations" de Eclipse.

Figura 21 - 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.

[sts] -----------------------------------------------------
[sts] Starting Gradle build for the following tasks: 
[sts]      run
[sts]      --debug-jvm
[sts] -----------------------------------------------------
: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 22 - Debug Configurations señalando la opción Debug

Figura 23 - Ventana Debug Configurations

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

Conclusiones

En resumen "Gradle Integration for Eclipse" aunque no es tan diferente de Buildship, sí provee una alternativa para quienes prefieran uno u otro al momento de desarrollar en Eclipse usando Gradle, en lugar de tener un panorama poco prometedor donde sólo se tenga una herramienta disponible (y quizás con poco mantenimiento).

Personalmente continuaré usando "Gradle Integration for Eclipse" ya que como lo mencionaba al principio lo encuentro un poco más estable y maduro, sin embargo al ser Buildship el plugin oficial de Gradle para Eclipse vale la pena revisar de vez en cuando los cambios y mejoras que se le adicionen a dicho plugin.

Referencias

https://github.com/spring-projects/eclipse-integration-gradle
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