Introduktion til PMD

1. Oversigt

Kort sagt er PMD en kildekodeanalysator til at finde almindelige programmeringsfejl som ubrugte variabler, tomme fangstblokke, unødvendig oprettelse af objekter osv.

Det understøtter Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML, XSL.

I denne artikel vil vi fokusere på, hvordan man bruger PMD til at udføre statisk analyse i et Java-projekt.

2. Forudsætninger

Lad os starte med at konfigurere PMD til et Maven-projekt - ved hjælp af og konfiguration af maven-pmd-plugin:

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

Du kan finde den nyeste version af maven-pmd-plugin her.

Bemærk hvordan vi tilføjer regelsæt i konfigurationen her - disse er en relativ sti til allerede at definere regler fra PMD-kernebiblioteket.

Endelig, inden vi kører alt, lad os oprette en simpel Java-klasse med nogle skarpe problemer - noget som PMD kan begynde at rapportere problemer om:

offentlig klasse Ct {public int d (int a, int b) {if (b == 0) return Integer.MAX_VALUE; ellers returnere a / b; }} 

3. Kør PMD

Med den enkle PMD-konfiguration og prøvekoden - lad os generere en rapport i build-målmappen:

mvn websted

Den genererede rapport kaldes pmd.html og er placeret i mål / sted folder:

Filer com / baeldung / pmd / Cnt.java Overtrædelseslinie Undgå korte klassenavne som Cnt 1–10 Undgå at bruge korte metodenavne 3 Undgå variabler med korte navne som b 3 Undgå variabler med korte navne som a 3 Undgå at bruge hvis ... ellers udsagn uden krøllede seler 5 Undgå at bruge hvis ... ellers udsagn uden krøllede seler 7 

Som du kan se - vi får ikke resultater. Rapporten viser overtrædelser og linjenumre i din Java-kode ifølge PMD.

4. Regelsæt

PMD-pluginet bruger fem standardregelsæt:

  • basic.xml
  • tom.xml
  • import.xml
  • unødvendigt.xml
  • ubrugt kode.xml

Du kan bruge andre regelsæt eller oprette dine egne regelsæt og konfigurere disse i pluginet:

 ... 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 

Bemærk, at vi bruger enten en relativ adresse, en absolut adresse eller endda en URL - som værdien af ​​'regelsæt' -værdien i konfigurationen.

En ren strategi til at tilpasse, hvilke regler der skal bruges til et projekt skriv en brugerdefineret regelsætfil. I denne fil kan vi definere hvilke regler der skal bruges, tilføje brugerdefinerede regler og tilpasse hvilke regler der skal medtages / ekskluderes fra de officielle regelsæt.

5. Brugerdefineret regelsæt

Lad os nu vælge de specifikke regler, vi vil bruge fra eksisterende sæt regler i PMD - og lad os også tilpasse dem.

Først opretter vi et nyt regelsæt.xml fil. Vi kan selvfølgelig bruge en af ​​de eksisterende regelsætfiler som et eksempel og kopiere og indsætte det i vores nye fil, slette alle de gamle regler fra den og ændre navn og beskrivelse:

   Denne regelsæt kontrollerer min kode for dårlige ting 

For det andet, lad os tilføje nogle regelreferencer:

Eller tilføj nogle specifikke regler:

Vi kan tilpasse meddelelsens og prioritet for reglen:

 2  

Og du kan også tilpasse en regels egenskabsværdi som denne:

Bemærk, at du kan tilpasse individuelle refererede regler. Alt undtagen klassen for reglen kan tilsidesættes i dit tilpassede regelsæt.

Dernæst - du kan også ekskludere regler fra et regelsæt:

Dernæst - du kan også ekskludere filer fra et regelsæt ved hjælp af ekskluderingsmønstre med et valgfrit overordnet inkluderingsmønster.

En fil ekskluderes fra behandling, når der er et matchende ekskluderingsmønster, men intet matchende inkluderingsmønster.

Stiseparatorer i kildefilstien er normaliseret til at være '/' -tegnet, så det samme regelsæt kan bruges på flere platforme gennemsigtigt.

Derudover fungerer denne exclude / include-teknik uanset hvordan PMD bruges (f.eks. Kommandolinje, IDE, Ant), hvilket gør det lettere at holde anvendelsen af ​​dine PMD-regler konsekvent i hele dit miljø.

Her er et hurtigt eksempel:

  Mit regelsæt. * / Nogle / pakke /.*. * / Nogle / anden / pakke / FunkyClassNamePrefix. *. * / Nogle / pakke / ButNotThisClass. * ... 

6. Konklusion

I denne hurtige artikel introducerede vi PMD - et fleksibelt og meget konfigurerbart værktøj med fokus på statisk analyse af Java-kode

Som altid er den fulde kode, der er præsenteret i denne vejledning, tilgængelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found