Bevezetés a PMD-be

1. Áttekintés

Egyszerűen fogalmazva: a PMD egy forráskód-elemző, amely olyan programozási hibákat keres, mint a fel nem használt változók, az üres fogási blokkok, a felesleges objektumok létrehozása stb.

Támogatja a Java, a JavaScript, a Salesforce.com Apex, a PLSQL, az Apache Velocity, az XML, az XSL fájlokat.

Ebben a cikkben arra fogunk koncentrálni, hogy miként lehet a PMD-vel statikus elemzést végezni egy Java projektben.

2. Előfeltételek

Kezdjük azzal, hogy a PMD-t egy Maven projektbe állítjuk be - a maven-pmd-plugin:

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

Megtalálja a legújabb verzióját maven-pmd-plugin itt.

Figyelje meg, hogyan adunk ide szabálykészleteket a konfigurációba - ezek egy relatív útvonal a szabályok definiálásához a PMD magkönyvtárból.

Végül, mielőtt mindent futtatnánk, hozzunk létre egy egyszerű Java osztályt néhány kirívó kérdéssel - amiről a PMD elkezdheti jelenteni a problémákat:

Ct nyilvános osztály {public int d (int a, int b) {if (b == 0) return Integer.MAX_VALUE; különben adja vissza a / b; }} 

3. Futtassa a PMD-t

Az egyszerű PMD konfigurációval és a mintakóddal hozzunk létre egy jelentést a build célmappában:

mvn site

A létrehozott jelentést meghívjuk pmd.html és a cél / webhely mappa:

Fájlok com / baeldung / pmd / Cnt.java szabálysértési sor Kerülje a rövid osztályneveket, mint a Cnt 1–10 Kerülje a rövid metódusnevek használatát 3 Kerülje a rövid nevű változókat, mint a b 3 Kerülje a rövid nevű változókat, mint a 3 Kerülje a ... göndör zárójel nélküli állítások 5 Kerülje el az if ... egyéb kifejezések használatát göndör zárójel nélküli zárójelek nélkül 7 

Mint láthatja - nem érünk el eredményt. A jelentés a PMD szerint megsértéseket és sorszámokat mutat a Java kódodban.

4. Szabályok

A PMD plugin öt alapértelmezett szabálykészletet használ:

  • basic.xml
  • üres.xml
  • import.xml
  • felesleges.xml
  • unusedcode.xml

Használhat más szabálykészleteket, vagy létrehozhat saját szabálykészleteket, és konfigurálhatja ezeket a beépülő modulban:

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

Figyelje meg, hogy relatív címet, abszolút címet vagy akár URL-t használunk a konfigurációban szereplő „szabálykészlet” értékeként.

Tiszta stratégia a projekthez használandó szabályok testreszabására írjon egyedi szabálykészlet fájlt. Ebben a fájlban meghatározhatjuk, mely szabályokat kell használni, egyéni szabályokat adhatunk hozzá, és testre szabhatjuk, mely szabályokat vegye fel / zárja ki a hivatalos szabálykészletekből.

5. Egyéni szabálykészlet

Válasszuk ki most a PMD meglévő szabálykészleteiből azokat a konkrét szabályokat, amelyeket használni szeretnénk - és testre is szabjuk őket.

Először létrehozunk egy újat ruleset.xml fájl. Természetesen felhasználhatjuk a meglévő szabálykészletek egyikét példaként, és bemásolhatjuk és beilleszthetjük az új fájlunkba, törölhetjük az összes régi szabályt, és megváltoztathatjuk a nevet és a leírást:

   Ez a szabálykészlet ellenőrzi a kódomat, hogy van-e benne rossz dolog 

Másodszor adjunk hozzá néhány szabályhivatkozást:

Vagy adjon meg néhány konkrét szabályt:

Testreszabhatjuk a szabály üzenetét és prioritását:

 2  

Ezenkívül testre szabhatja a szabály tulajdonságának értékét:

Vegye figyelembe, hogy testreszabhatja az egyes hivatkozott szabályokat. A szabály osztályán kívül minden felülírható az egyéni szabálykészletben.

Ezután - szabályokat is kizárhat egy szabálykészletből:

Következő - fájlokat is kizárhat a szabálykészletből kizáró minták használatával, opcionálisan felülírható mintával.

Egy fájl kizárásra kerül a feldolgozásból, ha van egyező kizáró mintázat, de nincs megfelelő egyező minta.

A forrásfájl elérési útvonalában levő útvonal elválasztók normalizálódnak a „/” karakterre, így ugyanaz a szabálykészlet több platformon is átláthatóan használható.

Ez a kizárási / belefoglalási technika a PMD használatától függetlenül is működik (pl. Parancssor, IDE, Ant), megkönnyítve ezzel a PMD-szabályok alkalmazásának következetes fenntartását az egész környezetben.

Itt egy rövid példa:

  Saját szabálykészlet. * / Some / package /.*. * / Some / other / package / FunkyClassNamePrefix. *. * / Some / package / ButNotThisClass. * ... 

6. Következtetés

Ebben a gyors cikkben bemutattuk a PMD-t - egy rugalmas és jól konfigurálható eszközt, amely a Java kód statikus elemzésére összpontosít

Mint mindig, az ebben az oktatóanyagban bemutatott teljes kód elérhető a Githubon.