Использование плагинов в 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 позволяет зафиксировать версию плагина, задать ему необходимые параметры, привязать к фазам.
Пример объявление плагина:
<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>
Please log in or register to have a possibility to add comment.