Einführung in PMD

1. Übersicht

Einfach ausgedrückt ist PMD 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 des maven-pmd-Plugins :

 ...    org.apache.maven.plugins maven-pmd-plugin 3.7   /rulesets/java/braces.xml /rulesets/java/naming.xml       

Die neueste Version des maven-pmd-Plugins finden Sie hier.

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 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ßt pmd.html und befindet sich im Ziel- / Site- Ordner:

Files com/baeldung/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 

Wie Sie sehen, erzielen wir keine Ergebnisse. Der Bericht zeigt laut PMD Verstöße und Zeilennummern in Ihrem Java-Code.

4. Regelsätze

Das PMD-Plugin verwendet fünf Standardregelsätze:

  • basic.xml
  • empty.xml
  • imports.xml
  • unnötig.xml
  • unusedcode.xml

Sie können andere Regelsätze verwenden oder eigene 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 //localhost/design.xml       

Beachten Sie, dass wir entweder eine relative Adresse, eine absolute Adresse oder sogar eine URL verwenden - als Wert des Regelsatzwerts in der Konfiguration.

Eine saubere Strategie zum Anpassen der für ein Projekt zu verwendenden Regeln besteht darin , eine benutzerdefinierte Regelsatzdatei zu schreiben . In dieser Datei können wir definieren, welche Regeln verwendet werden sollen, benutzerdefinierte Regeln hinzufügen und anpassen, welche Regeln in die offiziellen Regelsätze aufgenommen oder aus diesen 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 neue Datei ruleset.xml . Wir können natürlich eine der vorhandenen Regelsatzdateien 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 Priorität der Regel anpassen:

 2  

Sie können den Eigenschaftswert einer Regel auch folgendermaßen anpassen:

Beachten Sie, dass Sie einzelne Regeln anpassen können, auf die verwiesen wird. Alles außer der Klasse der Regel kann in Ihrem benutzerdefinierten Regelsatz überschrieben werden.

Weiter - Sie können auch Regeln aus einem Regelsatz ausschließen:

Weiter - Sie können Dateien auch mithilfe von Ausschlussmustern mit einem optionalen überschreibenden Einschlussmuster aus einem Regelsatz ausschließen.

Eine Datei wird von der Verarbeitung ausgeschlossen, wenn ein übereinstimmendes Ausschlussmuster vorhanden ist, jedoch kein übereinstimmendes Einschlussmuster.

Pfadtrennzeichen im Quelldateipfad werden auf das Zeichen '/' normalisiert, sodass der gleiche Regelsatz auf mehreren Plattformen transparent verwendet werden kann.

Darüber hinaus funktioniert diese Ausschluss- / Einschlussmethode unabhängig von der Verwendung von PMD (z. B. Befehlszeile, IDE, Ant). Dadurch wird es einfacher, die Anwendung Ihrer PMD-Regeln in Ihrer Umgebung konsistent zu halten.

Hier ist 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 Tutorial auf Github verfügbar.