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.