Въведение в PMD

1. Общ преглед

Най-просто казано, PMD е анализатор на изходен код, за да открие често срещани програмни недостатъци като неизползвани променливи, празни блокове за хващане, ненужно създаване на обекти и т.н.

Той поддържа Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML, XSL.

В тази статия ще се съсредоточим върху това как да използваме PMD за извършване на статичен анализ в Java проект.

2. Предпоставки

Нека започнем с настройването на PMD в проект на Maven - използване и конфигуриране на приставката maven-pmd :

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

Можете да намерите най-новата версия на приставката maven-pmd тук.

Забележете как добавяме набори от правила в конфигурацията тук - това е относителен път към вече дефиниране на правила от основната библиотека на PMD.

И накрая, преди да стартираме всичко, нека създадем прост Java клас с някои явни проблеми - нещо, за което PMD може да започне да докладва за проблеми:

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

3. Стартирайте PMD

С простата конфигурация на PMD и примерния код - нека генерираме отчет в целевата папка за изграждане:

mvn site

Генерираният отчет се нарича pmd.html и се намира в папката target / site :

Files com/baeldung/pmd/Cnt.java Violation Line Avoid short class names like Cnt 1–10 Avoid using short method names 3 Avoid variables with short names like b 3 Avoid variables with short names like a 3 Avoid using if...else statements without curly braces 5 Avoid using if...else statements without curly braces 7 

Както можете да видите - не получаваме резултати. Отчетът показва нарушения и номера на редове във вашия Java код, според PMD.

4. Rulesets

Приставката PMD използва пет набора от правила по подразбиране:

  • basic.xml
  • празен.xml
  • import.xml
  • ненужен.xml
  • unusedcode.xml

Можете да използвате други набори от правила или да създадете свои собствени набори от правила и да ги конфигурирате в приставката:

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

Забележете, че използваме или относителен адрес, абсолютен адрес или дори URL адрес - като стойността на стойността на „набор от правила“ в конфигурацията.

Изчистената стратегия за персонализиране на това кои правила да се използват за даден проект е да се напише персонализиран файл с набор от правила . В този файл можем да дефинираме кои правила да използваме, да добавим персонализирани правила и да персонализираме кои правила да включим / изключим от официалните набори от правила.

5. Персонализиран набор от правила

Нека сега изберем конкретните правила, които искаме да използваме, от съществуващите набори от правила в PMD - и нека също да ги персонализираме.

Първо ще създадем нов файл ruleset.xml . Можем, разбира се, да използваме един от съществуващите файлове с набори от правила като пример и да копираме и поставим това в новия ни файл, да изтрием всички стари правила от него и да променим името и описанието:

   This ruleset checks my code for bad stuff  

На второ място, нека добавим някои препратки към правилата:

Или добавете някои специфични правила:

Можем да персонализираме съобщението и приоритета на правилото:

 2  

И вие също можете да персонализирате стойността на свойството на правило по следния начин:

Забележете, че можете да персонализирате отделни референтни правила. Всичко, освен класът на правилото, може да бъде заменено във вашия персонализиран набор от правила.

След това - можете също да изключите правила от набор от правила:

След това - можете също да изключите файлове от набор от правила, като използвате шаблони за изключване, с незадължителен заместващ шаблон за включване.

Файлът ще бъде изключен от обработка, когато има съвпадащ модел за изключване, но няма съвпадащ шаблон за включване.

Разделителите на пътища в пътя на изходния файл се нормализират, за да бъдат символът '/', така че един и същ набор от правила може да се използва прозрачно на множество платформи.

Освен това, тази техника за изключване / включване работи независимо от това как се използва PMD (например команден ред, IDE, Ant), което улеснява поддържането на прилагането на вашите правила на PMD последователно във вашата среда.

Ето бърз пример:

  My ruleset .*/some/package/.*  .*/some/other/package/FunkyClassNamePrefix.*  .*/some/package/ButNotThisClass.* ... 

6. Заключение

В тази бърза статия представихме PMD - гъвкав и силно конфигурируем инструмент, фокусиран върху статичния анализ на Java кода

Както винаги, пълният код, представен в този урок, е достъпен в Github.