Creación: 24-11-2013
Índice de contenidos
1. Introducción
2. Entorno
3. Colorización mediante la shell
4. Algunos ejemplos
5. ¿Y qué pasa si soy de Windows?
6. Conclusiones
7. Sobre el autor
1. Introducción
No me digáis que nunca habéis pensado que la salida por consola de Maven es un poco, como lo diría, "densa". Maven da muchísima información sobre todo lo que está ocurriendo durante el proceso de construcción: módulos, descargas, plugins, tests, trazas… y un largo etc.
Esta información resulta altamente útil para nuestro trabajo, pero a menudo cuesta localizar lo que necesitamos entre tantos datos. Por eso en este tutorial vamos a ver cómo podemos aplicarle un poco de color a la salida, y así localizar rápidamente lo que nos hace falta.
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 15′ (2.3 GHz Intel i7, 16GB 1600 Mhz DDR3, 500GB Flash Storage).
- NVIDIA GeForce G7 750M
- Sistema Operativo: Mac OS X Lion 10.9
- Java 1.7.0_45
- Maven 3.1.1
3. Colorización mediante la shell
La técnica que vamos a utilizar es muy sencilla. Simplemente vamos a usar la potencia de la shell de Unix para cambiar y transformar la salida de Maven y añadirle colores.
Para ello modificamos el fichero $HOME/.bash_profile y añadimos las siguientes líneas:
# Colorize Maven Output # Colors reference: http://en.wikipedia.org/wiki/ANSI_escape_code color_maven() { $M2_HOME/bin/mvn $* | sed -e 's/Tests run: ([^,]*), Failures: ([^,]*), Errors: ([^,]*), Skipped: ([^,]*)/ESC[32;1mTests run: 1ESC[0m, Failures: ESC[31;1m2ESC[0m, Errors: ESC[33;1m3ESC[0m, Skipped: ESC[34;1m4ESC[0m/g' -e 's/([INFO] -[-]*$)/ESC[36;1m1ESC[0m/g' -e 's/([INFO] Building.*)/ESC[36;1m1ESC[0m/g' -e 's/(.*WARN.*)/ESC[33;1m1ESC[0m/g' -e 's/(.*ERROR.*)/ESC[31;1m1ESC[0m/g' -e 's/(Downloaded:.*)/ESC[32;1m1ESC[0m/g' } alias mvn=color_maven alias maven=$M2_HOME/bin/mvn
En el script podemos ver como hacemos un alias mvn que llama a una función que invoca a
Maven y luego utiliza sed para buscar expresiones regulares e incrustar códigos de color
con caracteres de escape ESC.
También vemos como hacemos otro alias maven, pero este es sólo por si queremos llamar al original mvn.
Ojo, importante!!! cuando añadáis las líneas anteriores, tenéis que cambiar las letras ESC, del código anterior, por el verdadero carácter de escape. Para ello, por ejemplo si estáis en el vi podéis hacer Ctrl+v y pulsar la tecla Escape.
4. Algunos ejemplos
Error de compilación. Cuando no hay color todo es "plano", con el color podemos ver claramente donde empieza el módulo y donde está el error.
Aquí vemos un ejemplo de un error en los tests. Podemos identificar fácilmente dónde se ejecutan los tests, cuántos hay, cuántos fallan… e igual que antes, dónde están los errores.
5. ¿Y qué pasa si soy de Windows?
En Windows el interprete de comandos no nos permite hacer este tipo de cosas, pero tenemos otras alternativas, como Cygwin o como MinGW. Por ejemplo, para este último,
podemos igualmente modificar el .bashrc añadiendo las siguientes líneas para tener exactamente el mismo efecto:
# Colorize Maven Output # Colors reference: http://en.wikipedia.org/wiki/ANSI_escape_code color_maven() { $M2_HOME/bin/mvn $* | sed -e 's/Tests run: ([^,]*), Failures: ([^,]*), Errors: ([^,]*), Skipped: ([^,]*)/x1b[32;1mTests run: 1x1b[0m, Failures: x1b[31;1m2x1b[0m, Errors: x1b[33;1m3x1b[0m, Skipped: x1b[34;1m4x1b[0m/g' -e 's/([INFO] -[-]*$)/x1b[36;1m1x1b[0m/g' -e 's/([INFO] Building.*)/x1b[36;1m1x1b[0m/g' -e 's/(.*WARN.*)/x1b[33;1m1x1b[0m/g' -e 's/(.*ERROR.*)/x1b[31;1m1x1b[0m/g' -e 's/(Downloaded:.*)/x1b[32;1m1x1b[0m/g' } alias mvn=color_maven alias maven=$M2_HOME/bin/mvn
Podéis ver que básicamente lo único que cambia es el carácter de control, aquí podemos escribir directamente x1b en vez de tener que hacer Ctrl+v y la tecla Escape, como nos pasaba en OS X.
6. Conclusiones
Este es un pequeño ejemplo de como usar toda la potencia de la shell de Unix. En el caso que hemos visto, en concreto se trata de la shell Bash.
Además tenéis que tener en cuenta que esto es solo un ejemplo, ya que como hacemos uso de expresiones regulares, realmente podemos colorear cualquier parte de cualquier color. Así que ya sabéis, el límite es vuestra imaginación 😉
7. Sobre el autor
Alejandro Pérez García, Ingeniero en Informática (especialidad de Ingeniería del Software) y Certified ScrumMaster
Socio fundador de Autentia (Desarrollo de software, Consultoría, Formación)
mailto:alejandropg@autentia.com
Autentia Real Business Solutions S.L. – "Soporte a Desarrollo"