Gradle

Viernes 6 pm, te alistas para dejar la oficina y disfrutar del fin de semana, esperas la finalización de la ejecución de los tests en el servidor de Integración Continua para irte con tranquilidad. Por tu cuenta, ya has ejecutado los tests individualmente y todo anda ok, cuando derrepente recibes una notificación con el asunto BUILD FALLIDO…​. Por alguna razón, el build ha fallado y tienes que verificar el por qué? Afortunadamente, las build tools ofrecen un método para poder hacer debugging remoto.

En esta oportunidad, daremos a conocer como Gradle permite debugear cualquier tarea haciendo uso de la siguiente sintaxis <taskName>.test.

En el ejemplo, haremos uso del proyecto ldap-spring-boot. Primero, colocaremos un punto de interrupción en la clase Application.java del subproyecto ldap-spring-boot-samples/odm.

Luego, ejecutaremos el siguiente comando:

./gradlew -Dtest.debug :ldap-spring-boot-samples/odm:test

NOTA: Para propósitos del ejemplo sólo ejecutaremos la tarea test del subproyecto en mención.

Después de la ejecución del comando, el siguiente mensaje será mostrado en el terminal:

:ldap-spring-boot-samples/odm:test
Listening for transport dt_socket at address: 5005
> Building 93% > :ldap-spring-boot-samples/odm:test > 0 tests completed

El comando ejecutado abrirá el puerto 5005 y el proceso quedará en espera hasta que el IDE se conecte. En mi caso uso IntelliJ, clic en las siguientes opciones Run > Attach to Local Process y seleccionar el proceso Java que usa el puerto 5005 ó Run > Debug…​ > Edit Configurations…​ > Add New Configuration > Remote, verificar el Host y Port y clic en Debug.

Otra forma de habilitar el debug en los test es hacer uso del parámetro jvmArgs como se muestra a continuación:

test {
    jvmArgs '-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006'
}

NOTA: el puerto ha cambiado a 5006.

En este caso, no hacemos uso de -Dtest.debug, ejecutaremos la tarea test del subproyecto directamente:

./gradlew :ldap-spring-boot-samples/odm:test

El siguiente mensaje se muestra:

:ldap-spring-boot-samples/odm:test
Listening for transport dt_socket at address: 5006
> Building 93% > :ldap-spring-boot-samples/odm:test > 0 tests completed

Como podemos observar ahora el puesto es 5006, para conectarnos seguimos los pasos antes mencionados.


Eddú Meléndez

Java Software Engineer, Open Source Contributor