Cómo lanzar Crap4j desde Ant
1. Introducción
En adictosaltrabajo ya os hemos hablado de Crap4j, una implementación de la métrica CRAP (Change Risk Analisys and Predictions), algo que en castellano podriamos traducir como «Análisis y Predicciones sobre los Riesgos de realizar Cambios», os hemos explicado en qué consiste dicha métrica y os hemos explicado cómo instalar y utilizar el plugin de Crap4j para Eclipse. Podeis acceder al tutorial donde ya expliqué todo ello pulsando aquí.
Sin embargo, ¿sólo podemos utilizar Crap4j y todas sus ventajas si tenemos Eclipse?, ¿no podemos encontrar código «difícilmente mantenible» si usamos otro IDE, o incluso si no usamos ninguno?. Por suerte el equipo de Crap4j pensó en ello y permite la ejecución de su aplicación a través del archiconocido Ant.
En este tutorial explicaré cómo lanzar Crap4j desde ant en un proyecto desarrollado con maven, y menciono lo de maven simplemente por la estructura de directorios que tendrá el proyecto. Si quereis saber más sobre Crap4j visitad el tutorial enlazado anteriormente o el blog de Aberto Savoia.
2. Entorno
3. Instalación
Lo primero que hacermos es bajar la distribución para Ant de Crap4j desde esta URL: http://crap4j.org/downloads/ant_download.html. Como podeis ver es un jar y ocupa unos 7 MB.
Una vez descargado lo descomprimimos con cualquier aplicación que pueda descomprimir zip: 7-Zip, WinZip, Ark, FileRoller, Winrar, WinAce, etc. y lo dejamos en el directorio donde queramos instalarlo, por ejemplo en /home/raul/crap4j
Imagen 1. Contenido del JAR
2. JAR descomprimido en el directorio /home/raul/crap4j
Con esto ya tenenos descargado e instalado Crap4j, ahora sólo faltaria instalar Ant, cuya instalación presupongo y no cubro en este tutorial.
4. Ejecución
Si mirais dentro del directorio doc/ dentro de la instalación de Crap4j vereis un fichero llamado example_build.xml que servirá de plantilla para que creemos nuestros propios build.xml con los que lanzar Crap4j a través de Ant. Su contenido es el siguiente:
Sin embargo este fichero xml tiene cosas que, a priori, no nos interesan, pero sin embargo es muy util tenerlo como referencia.
Como ya comenté anteriomente en este tutorial vamos a lanzar Crap4j sobre un proyecto que utilice maven. De nuevo indico que, aunque maven sea totalmente independiente a Crap4j, lo menciono porque la estructura de directorios del proyecto va a ser la propuesta por maven:
src/main/java | Application/Library sources |
src/main/resources | Application/Library resources |
src/main/filters | Resource filter files |
src/main/assembly | Assembly descriptors |
src/main/config | Configuration files |
src/main/webapp | Web application sources |
src/test/java | Test sources |
src/test/resources | Test resources |
src/test/filters | Test resource filter files |
src/site | Site |
LICENSE.txt | Project’s license |
README.txt | Project’s readme |
Es decir:
- El código fuente del proyecto estará en src/main/java
- Los test en src/test/java.
- Las librerias necesarias para la compilación del proyecto estarán en el repositorio local de maven, en mi caso /home/raul/.m2/repository/
Aparte de estos directorios vamos a crearnos uno propio en el raíz de proyecto y lo llamaremos ‘crap4j‘ y ahi crearemos el fichero build.xml que utilizará ant para lanzar Crap4j, quedando la jerarquia de directorios de la siguiente manera;
Teniendo en cuenta las rutas a los directorios que he mencionado anteriormente, el fichero build.xml quedará de esta forma:
Donde:
Aqui se debe indicar la ruta donde hayais descomprimido Crap4j
No lo tocamos, es la definicion de la tarea ant
Se configura la ejecucion de Crap4j:
- Se indica cuál es el directorio base (que está configurado como {basedir})
- Dónde se van a dejar los resultados de la ejecucion de Crap4j («agitar/reports/crap4j«)
- Si de deben omitir los test (por defecto a false)
- Si se deben mostrar las trazas de debug al ejecutar Crap4j (por defecto a false)
...
Se indica cuál es el directorio o directorios donde encontrar las clases compiladas (sigue la jerarquia de maven)
Se indica cuál es el directorio o directorios donde encontrar el codigo fuente del proyecto (sigue la jerarquia de maven)
Se indica cuál es el directorio o directorios los test a ejecutar sobre el codigo compilados (sigue la jerarquia de maven)
Se indica cuál es el directorio o directorios donde encontrar las librerias utilizadas por nuestro proyecto (repositorio de maven)
Esta es una configuración de ejemplo que debereis adaptar si vuestro proyecto sigue otra jerarquia de directorios.
4. Ejecucion
Nos dirigimos al directorio /home/raul/autentia-project/crap4j, donde hemos creado nuestro fichero build.xml y ejecutamos ant:
$ ant
Buildfile: build.xml
run-crap4j:
[crap4j] Buildfile: /home/raul/autentia-project/crap_build.xml
[crap4j]
[crap4j] run-tests:
[crap4j] [super-runner] Running com.autentia.project.entity.CodeTest
[crap4j] [super-runner] Tests run: 4, Failures: 0, Errors: 0, Time elapsed: 0,193 sec
[crap4j] [super-runner] Running com.autentia.project.entity.DetectionTest
[crap4j] [super-runner] Tests run: 11, Failures: 0, Errors: 0, Time elapsed: 0,419 sec
[crap4j] [super-runner] Running com.autentia.project.entity.DetectionTypeGroupTest
[crap4j] [super-runner] Tests run: 5, Failures: 0, Errors: 0, Time elapsed: 0,582 sec
[crap4j] [super-runner] Running com.autentia.project.entity.DetectionTypeTest
[crap4j] [super-runner] Tests run: 6, Failures: 0, Errors: 0, Time elapsed: 0,278 sec
[crap4j] [super-runner] Running com.autentia.project.entity.EngineTest
[crap4j] [super-runner] Tests run: 6, Failures: 0, Errors: 0, Time elapsed: 0,184 sec
[crap4j] [super-runner] Running com.autentia.project.entity.ProjectReportFileUrlTest
[crap4j] [super-runner] Tests run: 5, Failures: 0, Errors: 0, Time elapsed: 0,424 sec
[crap4j] [super-runner] Running com.autentia.project.entity.ProjectTest
[crap4j] [super-runner] Tests run: 5, Failures: 0, Errors: 0, Time elapsed: 0,367 sec
[crap4j] [super-runner] Running com.autentia.project.entity.ScanTest
[crap4j] [super-runner] Tests run: 7, Failures: 0, Errors: 0, Time elapsed: 0,244 sec
[crap4j] [super-runner] Running com.autentia.project.entity.SourceTest
[crap4j] [super-runner] Tests run: 10, Failures: 0, Errors: 0, Time elapsed: 0,448 sec
[crap4j] [super-runner] Running es.raulexposito.jaro.core.test.util.EntityUtilTest
[crap4j] [super-runner] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0,202 sec
[crap4j]
[crap4j] agitar-all:
[crap4j]
[crap4j] BUILD SUCCESSFUL
[crap4j] Total time: 17 seconds
[crap4j] Ant exited with status 0
Tras ello, podeis ver que crea un par de cosas:
- Un fichero crap_build.xml en el raiz del proyecto que podemos ignorar.
- Los resultados de la ejecucion de Crap4j en el directorio agitar/reports/crap4j
Para ver los resultados solo deberemos abrir con un navegador el fichero index.html del directorio agitar/reports/crap4j
Si estais usando linux y no pudieseis generar los informes por culpa de este error:
Xlib: connection to «:0.0» refused by server
Xlib: No protocol specified
[crap4j] java.lang.InternalError: Can’t connect to X11 window server using ‘:0’ as the value of the DISPLAY variable.
[crap4j] at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
[crap4j] at sun.awt.X11GraphicsEnvironment.access$000(X11GraphicsEnvironment.java:53)
[crap4j] at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:142)
[crap4j] at java.security.AccessController.doPrivileged(Native Method)
lanzad este comando antes de invocar ant:
$ export ANT_OPTS=-Djava.awt.headless=true
5. Conclusiones
Como podeis ver no estamos «condenados» a usar Eclipse para poder utilizar la información proporcionada por Crap4j, ya que los autores de esta util herramienta nos permiten usarla de manera sencilla y configurable desde Ant.
Espero que os sea de utilidad.