Использование плагинов в Maven

Author: Tatyana Milkina

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 позволяет зафиксировать версию плагина, задать ему необходимые параметры, привязать к фазам. 

Пример объявление плагина:

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

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

Привязка плагина к фазе сборки 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. Apache maven compiler plugin

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

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

Пример использование Apache 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. 

Пример использования плагина 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>

Пример файла 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

Пример использования плагина 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>
Read also:
Comments