Einführung in PMD
1. Überblick
Einfach ausgedrückt istPMD ein Quellcode-Analysator, um häufig auftretende Programmierfehler wie nicht verwendete Variablen, leere Fangblöcke, unnötige Objekterstellung usw. zu finden.
Es unterstützt Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML und XSL.
In diesem Artikel konzentrieren wir uns auf die Verwendung von PMD zur Durchführung statischer Analysen in einem Java-Projekt.
2. Voraussetzungen
Beginnen wir mit dem Einrichten von PMD in einem Maven-Projekt - Verwenden und Konfigurieren dermaven-pmd-plugin:
...
org.apache.maven.plugins
maven-pmd-plugin
3.7
/rulesets/java/braces.xml
/rulesets/java/naming.xml
Sie finden die neueste Version vonmaven-pmd-pluginhere.
Beachten Sie, wie wir hier Regelsätze in die Konfiguration einfügen. Dies ist ein relativer Pfad, um bereits Regeln aus der PMD-Kernbibliothek zu definieren.
Bevor wir alles ausführen, erstellen wir abschließend eine einfache Java-Klasse mit einigen offensichtlichen Problemen - etwas, über das PMD Probleme melden kann:
public class Ct {
public int d(int a, int b) {
if (b == 0)
return Integer.MAX_VALUE;
else
return a / b;
}
}
3. Führen Sie PMD aus
Mit der einfachen PMD-Konfiguration und dem Beispielcode können Sie einen Bericht im Build-Zielordner erstellen:
mvn site
Der generierte Bericht heißtpmd.html und befindet sich im Ordnertarget/site:
Files com/example/pmd/Cnt.java Violation Line Avoid short class names like Cnt 1–10 Avoid using short method names 3 Avoid variables with short names like b 3 Avoid variables with short names like a 3 Avoid using if...else statements without curly braces 5 Avoid using if...else statements without curly braces 7
As you can see – we’re not getting results. Der Bericht zeigt laut PMD Verstöße und Zeilennummern in Ihrem Java-Code an.
4. Regelsätze
Das PMD-Plugin verwendet fünf Standardregelsätze:
-
basic.xml
-
empty.xml
-
imports.xml
-
unnecessary.xml
-
unusedcode.xml
Sie können andere Regelsätze verwenden oder Ihre eigenen Regelsätze erstellen und diese im Plugin konfigurieren:
...
org.apache.maven.plugins
maven-pmd-plugin
3.7
/rulesets/java/braces.xml
/rulesets/java/naming.xml
/usr/pmd/rulesets/strings.xml
http://localhost/design.xml
Beachten Sie, dass wir entweder eine relative Adresse, eine absolute Adresse oder sogar eine URL verwenden - als Wert für den Regelsatzwert in der Konfiguration.
Eine saubere Strategie zum Anpassen der für ein Projekt zu verwendenden Regeln lautetwrite a custom ruleset file. In dieser Datei können Sie definieren, welche Regeln verwendet werden sollen, benutzerdefinierte Regeln hinzufügen und welche Regeln für die offiziellen Regelsätze ein- oder ausgeschlossen werden sollen.
5. Benutzerdefinierter Regelsatz
Wählen wir nun die spezifischen Regeln aus, die wir aus vorhandenen Regelsätzen in PMD verwenden möchten, und passen sie auch an.
Zuerst erstellen wir eine neueruleset.xml-Datei. Wir können natürlich eine der vorhandenen Regeldateien als Beispiel verwenden und diese kopieren und in unsere neue Datei einfügen, alle alten Regeln daraus löschen und den Namen und die Beschreibung ändern:
This ruleset checks my code for bad stuff
Zweitens fügen wir einige Regelreferenzen hinzu:
Oder fügen Sie einige spezifische Regeln hinzu:
Wir können die Nachricht und die Priorität der Regel anpassen:
2
Sie können den Eigenschaftswert einer Regel auch folgendermaßen anpassen:
Beachten Sie, dass Sie einzelne referenzierte Regeln anpassen können. Alles außer der Regelklasse kann in Ihrem benutzerdefinierten Regelsatz überschrieben werden.
Weiter - Sie können auch Regeln aus einem Regelsatz ausschließen:
Next – you can also exclude files from a ruleset verwenden Ausschlussmuster mit einem optionalen überschreibenden Einschlussmuster.
Eine Datei wird von der Verarbeitung ausgeschlossen, wenn ein übereinstimmendes Ausschlussmuster, jedoch kein übereinstimmendes Einschlussmuster vorhanden ist.
Pfadtrennzeichen im Quelldateipfad werden normalisiert, sodass derselbe Regelsatz auf mehreren Plattformen transparent verwendet werden kann.
Zusätzlich funktioniert diese Ausschluss / Einschluss-Technik unabhängig davon, wie PMD verwendet wird (z. Kommandozeile, IDE, Ant), um die Anwendung Ihrer PMD-Regeln in Ihrer gesamten Umgebung konsistenter zu gestalten.
Hier ein kurzes Beispiel:
My ruleset
.*/some/package/.*
.*/some/other/package/FunkyClassNamePrefix.*
.*/some/package/ButNotThisClass.*
...
6. Fazit
In diesem kurzen Artikel haben wir PMD vorgestellt - ein flexibles und hoch konfigurierbares Tool, das sich auf die statische Analyse von Java-Code konzentriert
Wie immer ist der vollständige Code in diesem Tutorialover on Github verfügbar.