Configuración de Maven para usar el Plugin PMD
En este tutorial vamos a realizar una introducción del plugin PMD (versión 3.2) para Maven 2
Más concretamente vememos que modificaciones tenemos que realizar sobre los pom.xml
de nuestros proyectos para integrar en Maven
la funcionalidad de análisis y reporting de código que nos aporta PMD
¿Qué es PMD?
PMD verifica reglas de codificación buscando en el código fuente posibles errores del tipo:
- Nombres de variables demasiado cortos.
- Concatenaciones de String en lugar de usar StringBuffer.
- Bloques de código sin llaves de apertura y cierre.
- Variables declaradas sin usarse.
- Bloques de código repetido »
Copy/Paste Detector tool (CPD)
. - Funciones con más de un punto de salida (
return
). - …
- Y un largo etc.
Es decir, PMD nos proporciona información para mejorar la cálidad de nuestro código fuente evitándonos incluso comoter errores difíciles de detectar.
Por ejemplo, PMD nos reportaría que en la linea 5 de siguiente clase hay un posible error.
public class Clase1 { private String miVariable; public Clase1(String miVariable){ miVariable = miVariable; // ¡¡Error!!, lo correcto sería: this.miVariable = miVariable; } ... ... }
Instalación del Plugin
Puede descargar el plugin para su entorno de desarrollo favorito haciendo clic aquí
Si su entorno es Eclipse, para instalar el plugin simplemente deberá descomprimir el archivo dentro de la carpeta donde tenga instalado su Eclipse y reiniciar (su Eclipse) en caso de que esté abierto.
El plugin PMD en acción
A continuación vamos a ver el funcionamiento del plugin analizando un proyecto de prueba.
Además, para que sea más facil de asimilar, nuestro proyecto sólo tendrá una clase deficiente sintácticamente y sin sentido semántico.
Código fuente de nuestro proyecto:
package com.autentia.pmdeclipseplugin; import java.util.Enumeration; import java.util.*; /** * Clase para el tutorial de PMD * @author Carlos García. Autentia. * @see http://www.mobiletest.es */ public class Persona { public String dni; public Persona(String dni) { dni = (String) dni; } public boolean equals(Object obj) { try { String dni2 = ((Persona) obj).dni; return this.dni.equals( dni2 ); } catch (Exception ex){} return false; } public int funcionTonta2(int numerito){ int total = 0; if ((numerito % 3) == 0){ total+=3; } else if ((numerito % 4) == 0){ } else { total+=9; } if ((numerito % 3) == 0){ total+=3; } else if ((numerito % 4) == 0){ } else { total+=9; } Vector cadenas = new Vector(); cadenas.addElement("a"); cadenas.addElement("a"); cadenas.addElement("a"); Enumeration enum1 = cadenas.elements(); String cadenaTonta = ""; while (enum1.hasMoreElements()){ cadenaTonta += enum1.nextElement(); } System.err.print(cadenaTonta); return total; } public static void main( String[] args ){ try { new Persona("62626261231"); } catch (java.lang.Throwable ex) { System.out.println("error: " + ex); } } }
Definición y configuración del plugin PMD dentro del pom.xml
de nuestro proyecto (autocomentado):
4.0.0 pmdEclipsePlugin pmdEclipsePlugin pmdEclipsePlugin 1.0-SNAPSHOT http://maven.apache.org jar org.apache.maven.plugins maven-pmd-plugin 2.4 utf-8 20 1.4 /rulesets/basic.xml /rulesets/braces.xml /rulesets/design.xml /rulesets/unusedcode.xml /rulesets/imports.xml /rulesets/controversial.xml /rulesets/migrating.xml /rulesets/strings.xml /rulesets/optimizations.xml pmd cpd junit junit 3.8.1 test
Generación del Site
A través de línea de comandos, ejecutando:
mvn site
Desde Eclipse, haciendo clic con el botón derecho del ratón sobre el proyecto:
Informe PMD generado por el plugin
El informe nos reporta las siguientes advertencias:
Informe CPD generado por el plugin
El informe nos indica que hay un bloque de código repetido en nuestro proyecto.
Conclusiones
Sin lugar a dudas, Maven ha supuesto un antes y un después en la gestión de proyectos.
En Autentia, llevamos años usándolo e intentamos sacar todo su potencial a través del uso de plugin como el que se ha mostrado en este tutorial.
Bueno, eso es todo, un saludo.
Carlos García. Creador de MobileTest.