Einführung in PMD

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.