Введение в CheckStyle

Введение в CheckStyle

1. обзор

Checkstyle - это инструмент с открытым исходным кодом, который проверяет код на соответствие настраиваемому набору правил.

В этом руководстве мы рассмотримhow to integrate Checkstyle into a Java project via Maven and by using IDE plugins.

Плагины, упомянутые в разделах ниже, не зависят друг от друга и могут быть индивидуально интегрированы в нашу сборку или IDE. Например, плагин Maven не нужен в нашемpom.xml для запуска проверок в нашей Eclipse IDE.

2. Плагин Checkstyle Maven

2.1. Конфигурация Maven

Чтобы добавить Checkstyle в проект, нам нужно добавить плагин в раздел отчетовpom.xml:


    
        
            org.apache.maven.plugins
            maven-checkstyle-plugin
            3.0.0
            
                checkstyle.xml
            
        
    

This plugin comes with two predefined checks, a Sun-style check, and a Google-style check. Проверка по умолчанию для проектаsun_checks.xml.

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

Последнюю версию плагина можно найти наMaven Central.

2.2. Генерация отчетов

Теперь, когда наш плагин Maven настроен, мы можем сгенерировать отчет для нашего кода, выполнив командуmvn site. Once the build finishes, the report is available in the target/site folder under the name checkstyle.html.

В отчете Checkstyle есть три основные части:

Files: В этом разделе отчета содержитсяthe list of files in which the violations have happened. Он также показывает нам количество нарушений по степени их серьезности. Вот как выглядит раздел файлов отчета:

image

Rules: Эта часть отчета дает намoverview of the rules that were used to check for violations. Он показывает категорию правил, количество нарушений и серьезность этих нарушений. Вот пример отчета, который показывает раздел правил:

image

Details: Наконец, подробный раздел отчета предоставляет намdetails of the violations that have happened. Предоставленная информация находится на уровне номера строки. Вот типовой раздел отчета:

image

2.3. Интеграция сборки

Если есть необходимость в строгой проверке стиля кодирования,we can configure the plugin in such a way that the build fails when the code doesn’t adhere to the standards.

Мы делаем это, добавляя цель выполнения в наше определение плагина:


    org.apache.maven.plugins
    maven-checkstyle-plugin
    ${checkstyle-maven-plugin.version}
    
        checkstyle.xml
    
    
        
            
                check
            
        
    

АтрибутconfigLocation определяет, к какому конфигурационному файлу обращаться для проверки.

В нашем случае это файл конфигурацииcheckstyle.xml.. Цельcheck, упомянутая в разделе выполнения, просит плагин запустить на этапе проверки сборки и вызывает сбой сборки, когда происходит нарушение стандартов кодирования.

Теперь, если мы запустим командуmvn clean install, она просканирует файлы на предмет нарушений, и сборка завершится неудачно, если будут обнаружены какие-либо нарушения.

Мы также можем запустить только цель плагинаcheck, используяmvn checkstyle:check,, без настройки цели выполнения. Выполнение этого шага также приведет к ошибке сборки, если будут какие-либо ошибки проверки.

3. Eclipse Plugin

3.1. Конфигурации

Как и в случае интеграции с Maven, Eclipse позволяет нам использовать нашу пользовательскую конфигурацию.

Чтобы импортировать нашу конфигурацию, перейдите вWindow → Preferences → Checkstyle. В разделеGlobal Check Configurations нажмите наNew.

Это откроет диалог, который предоставит нам опции для указания нашего пользовательского файла конфигурации.

3.2. Просмотр отчетов

Теперь, когда наш плагин настроен, мы можем использовать его для анализа нашего кода.

Чтобы проверить стиль кодирования для проекта, щелкните правой кнопкой мыши проект вEclipse Project Explorer и выберитеCheckStyle → Check Code with Checkstyle.

The plugin will give us feedback on our Java code within the Eclipse, text editor. Он также сгенерирует отчет о нарушении для проекта, который доступен в виде представления в Eclipse.

Чтобы просмотреть отчет о нарушении, перейдите кWindow → Show View → Other и найдите Checkstyle. Должны отображаться параметры дляViolations иViolations Chart.

Выбор любого варианта даст нам представление о нарушениях, сгруппированных по типу. Вот круговая диаграмма нарушения для примера проекта:

image

Щелчок по части круговой диаграммы приведет нас к списку фактических нарушений в коде.

В качестве альтернативы мы можем открыть представлениеProblem IDE Eclipse и проверить проблемы, о которых сообщает плагин.

Вот пример проблемы в Eclipse IDE:

image

Нажатие на любое из предупреждений приведет нас к коду, где произошло нарушение.

4. IntelliJ IDEA Плагин

4.1. конфигурация

Как и Eclipse, IntelliJ IDEA также позволяет нам использовать наши собственные пользовательские конфигурации с проектом.

В IDE откройте «Настройки» и найдите Checkstyle. Отображается окно, в котором есть возможность выбрать наши чеки. Нажмите кнопку+, и откроется окно, в котором мы сможем указать местоположение файла, который будет использоваться.

Теперь мы выбираем файл конфигурации XML и нажимаем Далее. Это откроет предыдущее окно и покажет нашу новую добавленную опцию конфигурации. Мы выбираем новую конфигурацию и нажимаем OK, чтобы начать использовать ее в нашем проекте.

4.2. Просмотр отчетов

Теперь, когда наш плагин настроен, давайте воспользуемся им для проверки нарушений. Чтобы проверить наличие нарушений в конкретном проекте, перейдите наAnalyze → Inspect Code.

The Inspections Results will give us a view of the violations under the Checkstyle section. Вот пример отчета:

image

Нажатие на нарушения приведет нас к точным строкам в файле, где нарушения произошли.

5. Пользовательская конфигурация стиля проверки

В разделе создания отчетов Maven (раздел 2.2) мы использовали пользовательский файл конфигурации для выполнения наших собственных стандартных проверок кодирования.

We have a way to create our own custom configuration XML file, если мы не хотим использовать упакованные чеки Google или Sun.

Вот пользовательский файл конфигурации, используемый для вышеуказанных проверок:



    
        
            
        
    

5.1. DOCTYPE Определение

Первая строка, т. Е. определение DOCTYPE является важной частью файла и говорит, откуда загрузить DTD, чтобы системы могли понять конфигурации.

Если мы не включим это определение в наш файл конфигурации, он не будет действительным файлом конфигурации.

5.2. Модули

Файл конфигурации в основном состоит из модулей. A module has an attribute name which represents what the module does. Значение атрибутаname соответствует классу в коде плагина, который выполняется при запуске плагина.

Давайте узнаем о различных модулях, представленных в конфигурации выше.

5.3. Детали модуля

  • Checker: Модули структурированы в виде дерева, в корне которого находится модуль Checker. Этот модуль определяет свойства, которые наследуются всеми другими модулями конфигурации.

  • TreeWalker: Этот модуль проверяет отдельные исходные файлы Java и определяет свойства, применимые к проверке таких файлов.

  • AvoidStarImport: Этот модуль устанавливает стандарт отказа от использования импорта Star в нашем Java-коде. Он также имеет свойство, которое просит плагин сообщать о серьезности таких проблем, как предупреждение. Таким образом, всякий раз, когда такие нарушения обнаруживаются в коде, предупреждение будет помечено против них.

Чтобы узнать больше о пользовательских конфигурациях, следуйте этомуlink.

6. Анализ отчета для проекта Spring-Rest

В этом разделе мы собираемся пролить свет на анализ, проведенный Checkstyle, на примере пользовательской конфигурации, созданной в разделе 5 выше, наspring-rest project available on GitHub.

6.1. Формирование отчета о нарушении

Мы импортировали конфигурацию в Eclipse IDE, и вот отчет о нарушении, созданный для проекта:

image

В приведенных здесь предупреждениях говорится, что в коде следует избегать импорта подстановочных знаков. У нас есть два файла, которые не соответствуют этому стандарту. Когда мы нажимаем на предупреждение, оно приводит нас к файлу Java, в котором есть нарушение.

Вот как файлHeavyResourceController.java показывает полученное предупреждение:

image

6.2. Решение проблемы

Использование импорта Star в целом не является хорошей практикой, поскольку оно может создавать конфликты, когда два или более пакета содержат один и тот же класс.

В качестве примера рассмотрим классList,, которыйis доступен в пакетахjava.util иjava.awt обоих. Если мы используем оба импортаjava.util. * Иjava.awt.*, наш компилятор не сможет скомпилировать код, посколькуList доступен в обоих пакетах.

To resolve the issue mentioned above we organize the imports in both files and save them. Теперь, когда мы снова запускаем плагин, мы не видим нарушений, и теперь наш код соответствует стандартам, установленным в нашей пользовательской конфигурации.

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

В этой статье мы рассмотрели основы интеграции Checkstyle в наш Java-проект.

Мы узнали, что это простой, но мощный инструмент, который используется, чтобы убедиться, что разработчики придерживаются стандартов кодирования, установленных организацией.

Пример кода, который мы использовали для статического анализа, доступенover on GitHub.