Введение в PMD
1. обзор
Проще говоря,PMD - это анализатор исходного кода, предназначенный для поиска распространенных ошибок программирования, таких как неиспользуемые переменные, пустые блоки catch, создание ненужных объектов и т. Д.
Он поддерживает Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML, XSL.
В этой статье мы сосредоточимся на том, как использовать PMD для выполнения статического анализа в проекте Java.
2. Предпосылки
Начнем с настройки PMD в проекте Maven - с использованием и настройкойmaven-pmd-plugin:
...
org.apache.maven.plugins
maven-pmd-plugin
3.7
/rulesets/java/braces.xml
/rulesets/java/naming.xml
Вы можете найти последнюю версиюmaven-pmd-pluginhere.
Обратите внимание, как мы здесь добавляем наборы правил в конфигурацию - это относительный путь к уже определенным правилам из основной библиотеки 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/example/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
As you can see – we’re not getting results. Согласно PMD отчет показывает нарушения и номера строк в вашем коде Java.
4. Наборы правил
Плагин PMD использует пять наборов правил по умолчанию:
-
basic.xml
-
empty.xml
-
imports.xml
-
unnecessary.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
http://localhost/design.xml
Обратите внимание, что мы используем относительный адрес, абсолютный адрес или даже URL-адрес в качестве значения параметра "набор правил" в конфигурации.
Чистая стратегия настройки правил для использования в проекте -write a custom ruleset file. В этом файле мы можем определить, какие правила использовать, добавить пользовательские правила и настроить, какие правила включать / исключать из официальных наборов правил.
5. Пользовательский набор правил
Теперь давайте выберем конкретные правила, которые мы хотим использовать, из существующих наборов правил в PMD - и давайте также настроим их.
Сначала мы создадим новый файлruleset.xml. Конечно, мы можем использовать один из существующих файлов наборов правил в качестве примера, скопировать и вставить его в наш новый файл, удалить из него все старые правила и изменить имя и описание:
This ruleset checks my code for bad stuff
Во-вторых, давайте добавим несколько ссылок на правила:
Или добавьте некоторые конкретные правила:
Мы можем настроить сообщение и приоритет правила:
2
Вы также можете настроить значение свойства правила следующим образом:
Обратите внимание, что вы можете настроить индивидуальные правила, на которые ссылаются. Все, кроме класса правила, может быть переопределено в вашем пользовательском наборе правил.
Далее - вы также можете исключить правила из набора правил:
Next – you can also exclude files from a ruleset с использованием шаблонов исключения с необязательным переопределяющим шаблоном включения.
Файл будет исключен из обработки при наличии соответствующего шаблона исключения, но без соответствующего шаблона включения.
Разделители пути в пути к исходному файлу нормализуются и становятся символом «/», поэтому один и тот же набор правил можно прозрачно использовать на нескольких платформах.
Кроме того, этот метод исключения / включения работает независимо от того, как используется PMD (например, командной строки, IDE, Ant), облегчая поддержание согласованности применения ваших правил PMD в вашей среде.
Вот быстрый пример:
My ruleset
.*/some/package/.*
.*/some/other/package/FunkyClassNamePrefix.*
.*/some/package/ButNotThisClass.*
...
6. Заключение
В этой быстрой статье мы представили PMD - гибкий и легко настраиваемый инструмент, ориентированный на статический анализ кода Java.
Как всегда, полный код, представленный в этом руководстве, доступенover on Github.