Урок 21

Плагины Maven


1. Что такое плагины

Плагины - это способ расширить функциональность Maven в больших диапазонах. 

В простейшем случае запустить плагин просто, например:

mvn org.apache.maven.plugins:maven-checkstyle-plugin:check 
mvn maven-checkstyle-plugin:check
mvn checkstyle:check

В данном примере вызывается плагин с groupId "org.apache.maven.plugins", artifactId "maven-checkstyle-plugin", последней версией и целью (goal) "check".

Цель - это действие, которое плагин может выполнить. Целей может быть несколько.

2. Объявление плагина в pom.xml

Объявление плагина похоже на объявление зависимости. Также, как и зависимости плагины идентифицируется с помощью GAV (groupId, artifactId, version). Объявление плагина в pom.xml позволяет зафиксировать версию плагина, задать ему необходимые параметры, привязать к фазам. 

Пример 1. Объявление плагина

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.6</version>
</plugin>

После того как плагин объявлен, его можно настроить так, чтобы он автоматически запускался в нужный момент. Это делается с помощью привязки плагина к фазе сборки проекта. В данном примере плагин запустится в фазе проекта package:

Пример 2. Привязка плагина к фазе сборки package

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>

3. Примеры плагинов

3.1. Плагин maven-archetype-plugin

Плагин maven-archetype-plugin предназначен для того чтобы по существующему шаблону создавать новые проекты. Создать проект с помощью maven-archetype-plugin достаточно просто - достаточно набрать:

mvn archetype:generate

Дальше выбрать шаблон из списка, ответить на дополнительные вопросы - и плагин сгенерирует проект. 

3.2. Плагин maven-compiler-plugin

Компилятор - основной плагин который используется практически во всех проектах. Он доступен по умолчанию, но текущая версия Java 5. 

В следующем примере в конфигурации используется версия java 1.9 (source - версия языка на котором написана программа; target - версия Java машины которая будет этот код запускать) и указано что кодировка исходного кода программы UTF-8.

Пример 3. Использование плагина maven-compiler-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0.2</version>
    <configuration>
        <source>1.9</source>
        <target>1.9</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

3.3. Плагин maven-javadoc-plugin

Плагин maven-javadoc-plugin предназначен для того чтобы генерировать документацию по исходному коду проекта стандартной утилитой javadoc

Запускается с помощью команды:

mvn javadoc:javadoc

Документация генерируется в target/site/apidocs каталог текущего проекта.

3.4. Плагин maven-checkstyle-plugin

Плагин проверяет стиль и качество исходного кода и генерирует файл checkstyle-result.xml. Из наиболее часто используемых и простых проверок:

  • наличие комментариев;
  • размер класса не более N строк;
  • в конструкции в try-catch, блок catch не пустой. 

Запуск с помощью команды:

mvn checkstyle:check

Т.к. почти каждые проекты пишутся немного по-разному, рекомендуется создать свой набор правил. Или подавить проверку некоторых правил. Для этого используется файл suppressions.xml. 

Пример 4. Использование плагина maven-checkstyle-plugin

           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.17</version>
                <configuration>
                    <suppressionsLocation>suppressions.xml</suppressionsLocation>
                </configuration>
            </plugin>

Пример 5. Файл suppressions.xml

<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN"
        "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
    <suppress files="." checks="HideUtilityClassConstructorCheck"/>
    <suppress files="." checks="JavadocPackageCheck"/>
    <suppress files="." checks="MagicNumberCheck"/>
    <suppress files="." checks="JavadocMethodCheck"/>
    <suppress files="." checks="FinalParametersCheck"/>
    <suppress files="." checks="JavadocTypeCheck"/>
    <suppress files="." checks="JavadocVariableCheck"/>
    <suppress files="." checks="DesignForExtensionCheck"/>
    <suppress files="." checks="HiddenFieldCheck"/>
    <suppress files="." checks="AvoidInlineConditionalsCheck"/>

    <suppress files="NoBody.java" checks="NeedBracesCheck"/>
    <suppress files="NoBody.java" checks="EmptyStatementCheck"/>
    <suppress files="inheritance[\\/](A|C|D|Figure|Figure2|M|N).java" checks="VisibilityModifierCheck" />
    <suppress files="oop[\\/](Box[1-6]|HeavyBox|HeavyBox1|StaticVars|Test4|UseStatic|ColorBox|Shipment|Test2|Test3|Toy).java" 
checks="VisibilityModifierCheck" />
    <suppress files="introduction[\\/]VarDemo.java" checks="VisibilityModifierCheck" />
    <suppress files="introduction[\\/]VarDemo.java" checks="AvoidNestedBlocksCheck" />
    <suppress files="enumerations[\\/](Coffee|Coffee3|Coffee2).java" checks="VisibilityModifierCheck" />
</suppressions>

3.5. Плагин maven-pmd-plugin

maven-pmd-plugin - плагин для автоматического анализа кода на предмет наличия "нехорошего кода". Также в этом плагине есть цель которая находит дубликаты кода Copy/Paste Detector (CPD).

Существует два режима работы плагина:

  • Генерирование отчётов PMD и CPD:
    mvn pmd:pmd 
    mvn pmd:cpd​
    полезно для оценки качества существующих проектов которые раньше не использовали эти инструменты. Позволяет оценить масштабы "бедствия".
  • Проверка проект на наличие нарушений. В случае, если находится нарушение, сборка ломается:
    mvn pmd:check
    mvn pmd:cpd-check ​

3.6. Плагин findbugs-maven-plugin

findbugs-maven-plugin плагин для автоматического нахождения багов в проекте. Принцип действия плагина основан на поиске шаблонов ошибок. Код проекта проверяются на часто встречаемые ошибки, неправильное использование API и конструкций языка.

Запускаем с помощью

mvn findbugs:check

Пример 6. Использование плагина findbugs-maven-plugin

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>3.0.4</version>
                <configuration>
                    <xmlOutput>true</xmlOutput>
                </configuration>
            </plugin>


0 comments
Leave your comment: