Tag : vscode

post image

Debugeando una aplicación Java API RESTful con Visual Code y Gradle

Visual Studio Code desde que salio se convirtió en uno de mis IDES favoritos y de apoco se ha convertir en mi IDE predilecto, realmente a sido una de las grandes sorpresas que ha dado Microsoft al lanzar este software bajo el modelo OpenSource.

Aunque hay mucha documentación, vídeos, etc, que muestra la funcionalidad y personalización de este IDE he encontrado poca información de como debugear una aplicación Web Utilizando Gradle y este editor.

Antes de iniciar de lleno en la explicación, comentare una funcionalidad que hace que este IDE se mantenga simple y robusto, y al mismo tiempo una de las características que mas me gustan, tu puedes configurar que plugins se activan en los workspaces que tu configures.  Esto es genial de tantas maneras pero lo simplificare diciendo lo siguiente: vamos a cargar los plugins java(por ende algunos de los que recomendare en esta entrada) en los proyectos donde lo requiera y con esto evitaremos que si un proyecto no requiere determinados plugins, nuestro IDE siga muy liviano y con buen rendimiento.

Proyecto a utilizar

Ya que el framework web a utilizar no es el tema principal, simplificaremos en que utilizamos java spark, el cual es un framework realmente minimalista.  El cual a demás hace uso del estándar java servlet 3.x, con el cual podemos definir aplicaciones web dentro de aplicaciones .jar.  Este framework embebe un servidor jetty.

Para hacerte con el proyecto de demo, debes clonar el siguiente repositorio git publico y acceder al directorio:

git clone https://gitlab.com/zacapalug/gradle-vscode-debug.git
cd gradle-vscode-debug/

Una vez dentro del proyecto demos un primer vistazo sin entrar en detalle, ya que la mayoría de funcionalidad que este proyecto tiene es funcionalidad dummy con el objetivos puramente de prueba.  Dada esta aclaración procedemos a compilar y ejecutar el proyecto.

gradle clean build
gradle run

Con esto tendremos corriendo nuestra aplicación web en el puerto 8182, si quieres cambiarlo puedes ir a la clase Main en la linea 7.  Esta aplicación tiene tres métodos para nuestra API RESTful dummy

  1. http://127.0.0.1:8182/demo
  2. http://127.0.0.1:8182/status
  3. http://127.0.0.1:8182/cualquier-url
  4. http://127.0.0.1:8182/stop

Donde la primera simula un procesamiento de información, en el cual podemos definir varios breakpoints.  El segundo muestra información del request, con lo cual también podemos definir breakpoints interesantes.  El tercero hay poco que debugear y el ultimo detiene el servidor y muestra el respectivo mensaje.  Puedes copiar estar URLs e ir una a una en cualquier navegador web.

Plugins necesarios

Antes de listar los plugins requeridos para poder ejecutar nuestra practica, debemos ejecutar VSCode y abrir nuestro proyecto.

Acá podemos observar que el proyecto tiene la típica estructura de un proyecto java/gradle, así que instalaremos los plugins necesarios para este tipo de proyecto, yo en lo persona utilizo los siguientes:

Ejecutar la aplicación en modo debug

Para ejecutar el modo debug nuestra aplicación hemos agregado el task debug a nuestro fichero build.gradle.

Como podemos ver es un task bastante simple, donde configuramos las opciones necesarias al parámetro jvm-args del task run, terminamos configurando que al finalizar el task debug debe ejecutarse el task run, y debido que este lo acabamos de configurar, este task sera iniciado en modo debug.

Analizando los parámetros que se pasan a jvm-args, observación la definición del puerto al que debemos conectarnos para poder debugear nuestra aplicación, en este caso usamos el puerto 5005.

Con esto ya podemos ejecutar el comando gradle debug, y confirmar(como en la siguiente imagen) que el puerto de debug ya sido abierto.

Aunque el task ha sido ejecuta nuestra aplicación no ha iniciado a ejecutarse, esto por que el procesa esta esperado que se attache un debugger.  Podemos ver la configuración básica del plugin que hemos instalado en el fichero .vcode/launch.json.

Acá lo que debemos confirmar es que nos vamos a conectar al mismos puerto en que se ejecuto nuestra aplicación.  Esto lo podemos hacer en el menú de debug en la barra de herramientas de nuestro idea y presionando el botón play, teniendo previamente seleccionado el nombre asignado a nuestro debugger, en caso de tener otros debugger.

Una vez hecho esto podemos ver en la consola integrada como nuestra aplicación arranca y podemos ver como los paneles de debug son activados.

Vamos aponer un punto de interrupción en el archivo Rutas.java en la linea 44.

Una vez realizado esto podemos ir a nuestro navegador e ir al url http://127.0.0.1:8182/demo, y analicemos que podemos verificar en nuestro IDE.

Como podemos ver en la imagen, prácticamente con colocar el cursor sobre una imagen basta poder obtener el valor de esta, asi como otra información relevante.  Prácticamente es como lo que podemos hacer con IDEs como NetBeans, Eclipse, Intellij Idea o cualquier otro.

Cabe destacar que estos plugins aun se encuentran en modo Preview, pero me permiten poder debugear, al menos básicamente mis aplicaciones en mi IDE favorito(a la fecha).  Ademas hay mas temas de configuración, o otra herramienta como la consola de debug, que considero valdrá la pena explicar al tener una versión estable de estas utilidades.