Inleiding tot PMD

1. Overzicht

Simpel gezegd, PMD is een broncode-analysator om veelvoorkomende programmeerfouten te vinden, zoals ongebruikte variabelen, lege catch-blokken, onnodige objectcreatie, enzovoort.

Het ondersteunt Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML, XSL.

In dit artikel zullen we ons concentreren op het gebruik van PMD om statische analyse uit te voeren in een Java-project.

2. Vereisten

Laten we beginnen met het opzetten van PMD in een Maven-project - gebruik en configuratie van het maven-pmd-plugin:

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

U kunt de nieuwste versie van maven-pmd-plugin hier.

Merk op hoe we hier regelsets aan de configuratie toevoegen - dit is een relatief pad om al regels te definiëren vanuit de PMD-kernbibliotheek.

Laten we tot slot, voordat we alles uitvoeren, een eenvoudige Java-klasse maken met enkele in het oog springende problemen - iets waarover PMD problemen kan rapporteren:

public class Ct {public int d (int a, int b) {if (b == 0) return Integer.MAX_VALUE; anders retourneren a / b; }} 

3. Voer PMD uit

Met de eenvoudige PMD-configuratie en de voorbeeldcode - laten we een rapport genereren in de build-doelmap:

mvn-site

Het gegenereerde rapport wordt opgeroepen pmd.html en bevindt zich in de doel / site map:

Files com / baeldung / pmd / Cnt.java Overtredingsregel Vermijd korte klassennamen zoals Cnt 1-10 Vermijd het gebruik van korte methodenamen 3 Vermijd variabelen met korte namen zoals b 3 Vermijd variabelen met korte namen zoals a 3 Vermijd het gebruik van if ... else statements zonder accolades 5 Gebruik geen if ... else-statements zonder accolades 7 

Zoals u kunt zien, krijgen we geen resultaten. Het rapport toont volgens PMD overtredingen en regelnummers in uw Java-code.

4. Regelsets

De PMD-plug-in gebruikt vijf standaard regelsets:

  • basic.xml
  • empty.xml
  • imports.xml
  • onnodig.xml
  • unusedcode.xml

U kunt andere regelsets gebruiken of uw eigen regelsets maken en deze in de plug-in configureren:

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

Merk op dat we een relatief adres, een absoluut adres of zelfs een URL gebruiken - als de waarde van de ‘regelset'-waarde in de configuratie.

Een schone strategie om aan te passen welke regels voor een project moeten worden gebruikt schrijf een aangepast regelsetbestand. In dit bestand kunnen we definiëren welke regels moeten worden gebruikt, aangepaste regels toevoegen en aanpassen welke regels moeten worden opgenomen / uitgesloten van de officiële regelsets.

5. Aangepaste regelset

Laten we nu de specifieke regels kiezen die we willen gebruiken uit bestaande sets regels in PMD - en laten we ze ook aanpassen.

Eerst maken we een nieuw ruleset.xml het dossier. We kunnen natuurlijk een van de bestaande regelsetsbestanden als voorbeeld gebruiken en dat kopiëren en in ons nieuwe bestand plakken, alle oude regels eruit verwijderen en de naam en beschrijving wijzigen:

   Deze regelset controleert mijn code op slechte dingen 

Ten tweede, laten we enkele regelreferenties toevoegen:

Of voeg enkele specifieke regels toe:

We kunnen het bericht en de prioriteit van de regel aanpassen:

 2  

En u kunt ook de eigenschapswaarde van een regel als volgt aanpassen:

Merk op dat u individuele regels waarnaar wordt verwezen, kunt aanpassen. Alles behalve de klasse van de regel kan worden overschreven in uw aangepaste regelset.

Vervolgens kunt u ook regels uitsluiten van een regelset:

Vervolgens kunt u ook bestanden uitsluiten van een regelset uitsluitingspatronen gebruiken, met een optioneel vervangend include-patroon.

Een bestand wordt uitgesloten van verwerking als er een overeenkomend uitsluitingspatroon is, maar geen overeenkomend include-patroon.

Padscheidingstekens in het bronbestandspad worden genormaliseerd om het teken ‘/’ te zijn, zodat dezelfde regelset transparant op meerdere platforms kan worden gebruikt.

Bovendien werkt deze techniek voor uitsluiten / opnemen ongeacht hoe PMD wordt gebruikt (bijv. Opdrachtregel, IDE, Ant), waardoor het gemakkelijker wordt om de toepassing van uw PMD-regels consistent te houden in uw hele omgeving.

Hier is een snel voorbeeld:

  Mijn regelset. * / Some / package /.*. * / Some / other / package / FunkyClassNamePrefix. *. * / Some / package / ButNotThisClass. * ... 

6. Conclusie

In dit korte artikel hebben we PMD geïntroduceerd - een flexibele en zeer configureerbare tool gericht op statische analyse van Java-code

Zoals altijd is de volledige code die in deze tutorial wordt gepresenteerd, beschikbaar op Github.


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