Introduksjon til PMD

1. Oversikt

Enkelt sagt, PMD er en kildekodeanalysator for å finne vanlige programmeringsfeil som ubrukte variabler, tomme fangstblokker, unødvendig oppretting av objekter og så videre.

Den støtter Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML, XSL.

I denne artikkelen vil vi fokusere på hvordan du bruker PMD til å utføre statisk analyse i et Java-prosjekt.

2. Forutsetninger

La oss starte med å sette opp PMD i et Maven-prosjekt - bruke og konfigurere maven-pmd-plugin:

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

Du finner den siste versjonen av maven-pmd-plugin her.

Legg merke til hvordan vi legger til regelsett i konfigurasjonen her - dette er en relativ bane for å allerede definere regler fra PMD-kjernebiblioteket.

Til slutt, før vi kjører alt, la oss lage en enkel Java-klasse med noen skarpe problemer - noe PMD kan begynne å 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. Kjør PMD

Med den enkle PMD-konfigurasjonen og eksempelkoden - la oss generere en rapport i målmappen for bygg:

mvn nettsted

Den genererte rapporten kalles pmd.html og ligger i mål / nettsted mappe:

Files com / baeldung / pmd / Cnt.java Bruddlinje Unngå korte klassenavn som Cnt 1–10 Unngå å bruke korte metodenavn 3 Unngå variabler med korte navn som b 3 Unngå variabler med korte navn som a 3 Unngå å bruke hvis ... annet utsagn uten krøllete bukseseler 5 Unngå å bruke hvis ... annet uttalelser uten krøllete bukseseler 7 

Som du ser - vi får ikke resultater. Rapporten viser brudd og linjenumre i Java-koden din, ifølge PMD.

4. Regelsett

PMD-pluginet bruker fem standard regelsett:

  • basic.xml
  • tom.xml
  • import.xml
  • unødvendig.xml
  • unusedcode.xml

Du kan bruke andre regelsett eller lage dine egne regelsett, og konfigurere disse i plugin:

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

Legg merke til at vi bruker enten en relativ adresse, en absolutt adresse eller til og med en URL - som verdien av "regelsett" -verdien i konfigurasjonen.

En ren strategi for å tilpasse hvilke regler du skal bruke for et prosjekt skriv en egendefinert regelsettfil. I denne filen kan vi definere hvilke regler som skal brukes, legge til tilpassede regler og tilpasse hvilke regler som skal inkluderes / ekskluderes fra de offisielle regelsettene.

5. Egendefinert regelsett

La oss nå velge de spesifikke reglene vi vil bruke fra eksisterende sett med regler i PMD - og la oss også tilpasse dem.

Først skal vi lage en ny regelsett.xml fil. Vi kan selvfølgelig bruke en av de eksisterende regelsettfilene som et eksempel og kopiere og lime det inn i den nye filen, slette alle de gamle reglene fra den, og endre navn og beskrivelse:

   Dette regelsettet kontrollerer koden min for dårlige ting 

For det andre, la oss legge til noen regelreferanser:

Eller legg til noen spesifikke regler:

Vi kan tilpasse meldingen og prioriteten til regelen:

 2  

Og du kan også tilpasse en regels eiendomsverdi slik:

Legg merke til at du kan tilpasse individuelle refererte regler. Alt bortsett fra klassen til regelen kan overstyres i ditt tilpassede regelsett.

Neste - du kan også ekskludere regler fra et regelsett:

Neste - du kan også ekskludere filer fra et regelsett ved hjelp av ekskluder mønstre, med et valgfritt overordnet inkluderingsmønster.

En fil vil bli ekskludert fra behandling når det er et samsvarende ekskluderingsmønster, men ingen samsvarende inkluderingsmønster.

Baneseparatorer i kildefilbanen normaliseres til å være '/' -tegnet, slik at samme regelsett kan brukes på flere plattformer transparent.

I tillegg fungerer denne ekskluderings / inkluderings-teknikken uavhengig av hvordan PMD brukes (f.eks. Kommandolinje, IDE, Ant), noe som gjør det lettere å holde anvendelsen av PMD-reglene konsistente i hele ditt miljø.

Her er et raskt eksempel:

  Mitt regelsett. * / Noen / pakke /.*. * / Noen / annen / pakke / FunkyClassNamePrefix. *. * / Noen / pakke / ButNotThisClass. * ... 

6. Konklusjon

I denne raske artikkelen introduserte vi PMD - et fleksibelt og svært konfigurerbart verktøy med fokus på statisk analyse av Java-kode

Som alltid er den fullstendige koden som presenteres i denne opplæringen tilgjengelig på Github.


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