Введение в PMD

Введение в 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.