Uvod u PMD
1. Pregled
Jednostavno rečeno, PMD je analizator izvornog koda za pronalaženje uobičajenih programskih grešaka poput neiskorištenih varijabli, praznih blokova ulova, nepotrebnog stvaranja objekata itd.
Podržava Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML, XSL.
U ovom ćemo se članku usredotočiti na to kako koristiti PMD za izvođenje statičke analize u Java projektu.
2. Preduvjeti
Počnimo s postavljanjem PMD-a u Maven projekt - korištenjem i konfiguriranjem maven-pmd-plugin:
... org.apache.maven.plugins maven-pmd-plugin 3.7 /rulesets/java/braces.xml /rulesets/java/naming.xml
Možete pronaći najnoviju verziju maven-pmd-plugin ovdje.
Primijetite kako ovdje dodajemo skupove pravila u konfiguraciju - ovo je relativni put do već definiranja pravila iz osnovne knjižnice PMD-a.
Konačno, prije nego što sve pokrenemo, kreirajmo jednostavnu Java klasu s nekoliko upadljivih problema - nešto na čemu PMD može početi prijavljivati probleme:
javna klasa Ct {public int d (int a, int b) {if (b == 0) return Integer.MAX_VALUE; inače vrati a / b; }}
3. Pokrenite PMD
Jednostavnom PMD konfiguracijom i uzorkom koda - generirajmo izvješće u ciljnoj mapi gradnje:
mvn stranica
Pozvano je generirano izvješće pmd.html i nalazi se u cilj / mjesto mapa:
Datoteke com / baeldung / pmd / Cnt.java Linija kršenja Izbjegavajte kratka imena klasa poput Cnt 1-10 Izbjegavajte upotrebu kratkih imena metoda 3 Izbjegavajte varijable s kratkim imenima poput b 3 Izbjegavajte varijable s kratkim imenima poput 3 Izbjegavajte upotrebu if ... else izjave bez kovrčavih zagrada 5 Izbjegavajte upotrebu izjava if ... else bez kovrčavih zagrada 7
Kao što vidite - ne postižemo rezultate. Izvješće pokazuje kršenja i brojeve redaka u vašem Java kodu, prema PMD-u.
4. Ruleseti
Dodatak PMD koristi pet zadanih skupova pravila:
- basic.xml
- prazno.xml
- uvozi.xml
- nepotrebno.xml
- unusedcode.xml
Možete koristiti druge skupove pravila ili stvoriti vlastite skupove pravila i konfigurirati ih u dodatku:
... 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
Primijetite da kao vrijednost vrijednosti "skupa pravila" u konfiguraciji koristimo relativnu adresu, apsolutnu adresu ili čak URL.
Čista strategija prilagođavanja pravila koja treba koristiti za projekt napiši prilagođenu datoteku skupa pravila. U ovoj datoteci možemo definirati koja pravila koristiti, dodati prilagođena pravila i prilagoditi koja pravila uključiti / izuzeti iz službenih skupova pravila.
5. Prilagođeni skup pravila
Odaberite sada određena pravila koja želimo koristiti iz postojećih skupova pravila u PMD-u - a također ih prilagodimo.
Prvo ćemo stvoriti novi ruleset.xml datoteka. Možemo, naravno, koristiti jedan od postojećih datoteka skupova pravila kao primjer i kopirati i zalijepiti u našu novu datoteku, izbrisati iz nje sva stara pravila i promijeniti ime i opis:
Ovaj skup pravila provjerava u mojem kodu loše stvari
Drugo, dodajmo neke reference pravila:
Ili dodajte neka posebna pravila:
Možemo prilagoditi poruku i prioritet pravila:
2
Također možete prilagoditi vrijednost svojstva pravila na sljedeći način:
Primijetite da možete prilagoditi pojedinačna referencirana pravila. Sve osim klase pravila može se nadjačati u vašem prilagođenom skupu pravila.
Dalje - možete također izuzeti pravila iz skupa pravila:
Dalje - datoteke također možete izuzeti iz skupa pravila pomoću izuzetih uzoraka, s neobaveznim nadjačavanjem obrasca za uključivanje.
Datoteka će biti izuzeta iz obrade ako postoji odgovarajući obrazac za izuzeće, ali nema podudarnog uzorka za uključivanje.
Razdjelnici puta u putanji izvorne datoteke normalizirani su tako da budu znak '/', tako da se isti skup pravila može transparentno koristiti na više platformi.
Uz to, ova tehnika isključivanja / uključivanja djeluje bez obzira na to kako se koristi PMD (npr. Naredbeni redak, IDE, Ant), što olakšava primjenu vaših pravila PMD-a u skladu s vašim okruženjem.
Evo kratkog primjera:
Moj skup pravila. * / Some / package /.*. * / Some / other / package / FunkyClassNamePrefix. *. * / Some / package / ButNotThisClass. * ...
6. Zaključak
U ovom kratkom članku predstavili smo PMD - fleksibilni i vrlo podesivi alat usmjeren na statičku analizu Java koda
Kao i uvijek, puni kod predstavljen u ovom vodiču dostupan je na Githubu.