Integration von PMD Rule Sets in den Build Prozess.
Das im ersten Beitrag erwähnte Maven Plugin ‘PMD‘ soll nun genauer vorgestellt werden.
Nachdem man das Maven Plugin installiert hat und die Einstellungen
maven.pmd.failonerror=true
maven.pmd.failonruleviolation=true
in der project.properties Datei eines Maven (1) Projektes vorgenommen hat, kann der Test der Sourcen des Projektes durch den Aufruf maven pmd:report gestartet werden.
Das PMD Plugin enthält eine Menge verschiedener Regeln, an Hand derer der Source Code analysiert wird [Übersicht der PMD Rule Sets und Rules]. Dazu zählen Regeln, die beispielsweise in Gruppen wie Basic, Code Size, Design oder Strings zusammengefasst sind.
Wenn man einen PMD Report erstellt und keine weiteren Einstellungen an der project.properties Datei vorgenommen hat, werden alle Regeln, die in dem Plugin bereits enthalten sind, angewendet. Bei einem größeren Software Projekt, bei dem noch keine Metriken verwendet wurden, werden dann mit großer Wahrscheinlichkeit Hinweise ausgegeben.
Um in einen gewachsenen Software Projekt die Integration des PMD Plugins durchführen zu können bietet sich die Möglichkeit an, eigene Regeln zu definieren. Dies ist sehr einfach möglich.
Es genügt, eine eigene ruleset.xml Datei zu erstellen, in der dann die Regeln aufgenommen werden [Rahmen dieser Datei]. Die erstellte Datei wird in den project.properties unter dem Key maven.pmd.rulesetfiles registriert:
maven.pmd.rulesetfiles=${basedir}/ruleset.xml
Es gibt drei Möglichkeit, wie man eigene Regeln in der Datei aufnehmen kann:
1. Referenzieren eines PMD Rule Sets
Die Regeln des PMD Plugins sind in Gruppen (Sets) zusammengefasst. Durch den Eintrag
<rule ref=”rulesets/basic.xml”
message=”Handle all basic rules” />
in der ruleset.xml werden beim Erstellen des PMD Reports alle Regeln angewendet,
die in dieser Gruppe (basic) zusammengefasst sind.
2. Referenzieren einer PMD Rule aus einem PMD Rule Set
Es ist auch möglich, direkt einzelne Regeln eines Rule Sets zu definieren.
<rule ref=”rulesets/basic.xml/EmptyCatchBlock”
message=”Must handle exceptions” />
Im Beispiel handelt es sich um die Regel, die überprüft, ob im analysierten Source Code leere Catch Blöcke vorkommen.
3. Eigene Regeln erstellen
Eigene Regeln können mit Hilfe von Java und der Implementierung von Klassen erfolgen, die z.B. die Klasse AbstractRule erweitern. Neben dem Schreiben eigener Java Klassen ist es auch möglich, XPath Expressions zu verwenden, um Regeln zu hinterlegen. Für beide Fälle ist eine Einführung hier zu finden.

