Maven плагины
Плагины Maven — это исполняемые компоненты, расширяющие функциональность Maven. Каждый плагин содержит одну или несколько целей, используемых для выполнения конкретных задач (таких как компиляция, тестирование, упаковка и т. д.).
Связь между плагинами и жизненным циклом:
Жизненный цикл: определяет порядок фаз сборки
Плагин: предоставляет конкретные реализации (цели) для выполнения задач этих фаз

Maven имеет следующие три стандартных жизненных цикла:
- clean: отвечает за очистку проекта
- default (или build): отвечает за развертывание проекта
- site: отвечает за создание документации сайта проекта

Каждый жизненный цикл содержит ряд фаз. Эти фазы эквивалентны унифицированным интерфейсам, предоставляемым Maven, а реализация этих фаз выполняется плагинами Maven.
Когда мы вводим команду mvn, напримерmvn clean, clean соответствует фазе clean жизненного цикла Clean. Однако конкретная операция clean опирается наmaven-clean-pluginдля её реализации.
Следовательно, конкретная реализация каждой фазы жизненного цикла Maven осуществляется с помощью плагинов Maven.
Maven на самом деле представляет собой фреймворк, который полагается на плагины для выполнения. Фактически каждая задача выполняется плагинами. Плагины Maven обычно используются для:
- Создание jar-файлов
- Создание war-файлов
- Компиляция файлов кода
- Модульное тестирование кода
- Создание документации проекта
- Создание отчётов проекта
Плагины обычно предоставляют набор целей и могут быть выполнены с использованием следующего синтаксиса:
<code>mvn [plugin-name]:[goal-name]</code>
Например, проект Java может использовать цель compile плагина maven-compiler-plugin для компиляции, используя следующую команду:
<code>mvn compiler:compile</code>
Основной механизм плагинов
Координаты плагина
Как и зависимости, плагины также однозначно идентифицируются по groupId, artifactId и version:
| Attribute | Описание | Типичные значения |
|---|---|---|
groupId | Организация плагина | org.apache.maven.plugins(Официальные плагины) |
artifactId | Имя плагина | maven-compiler-plugin |
version | Версия плагина | 3.8.1 |
Цели плагина
Каждый плагин может содержать несколько целей, например:
maven-compiler-plugin:compile: Компиляция основного кодаtestCompile: Компиляция тестового кода
maven-surefire-plugin:test: Запуск модульных тестов
Методы привязки плагина
1. Встроенная привязка
Maven имеет предварительно привязанные цели плагинов к фазам жизненного цикла:
| Фаза жизненного цикла | Привязанная цель плагина |
|---|---|
compile | maven-compiler-plugin:compile |
test | maven-surefire-plugin:test |
package | maven-jar-plugin:jar(илиmaven-war-plugin:war) |
2. Пользовательская привязка
Явно настроить в pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<executions>
<execution>
<phase>compile</phase> <!-- 绑定到 compile 阶段 -->
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Распространённые официальные плагины
Связанные с компиляцией
| Плагин | Назначение | Распространённые цели |
|---|---|---|
maven-compiler-plugin | Компиляция Java-кода | compile, testCompile |
maven-resources-plugin | Обработка файлов ресурсов | resources, testResources |
Пример конфигурации:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source> <!-- Java 版本 -->
<target>11</target>
</configuration>
</plugin>
Связанные с тестированием
| Плагин | Назначение | Распространённые цели |
|---|---|---|
maven-surefire-plugin | Запустить модульные тесты | test |
maven-failsafe-plugin | Запустить интеграционные тесты | integration-test |
Конфигурация для пропуска тестов:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests> <!-- 跳过测试 -->
</configuration>
</plugin>
Связанное с упаковкой
| Плагин | Назначение | Распространённые цели |
|---|---|---|
maven-jar-plugin | Упаковка JAR-файлов | jar |
maven-war-plugin | Упаковка WAR-файлов | war |
maven-assembly-plugin | Пользовательская упаковка | single |
Конфигурация исполняемого JAR:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass> <!-- 指定主类 -->
</manifest>
</archive>
</configuration>
</plugin>Связанное с развертыванием
| Плагин | Назначение | Распространённые цели |
|---|---|---|
maven-install-plugin | Установить в локальный репозиторий | install |
maven-deploy-plugin | Развернуть в удалённом репозитории | deploy |
Методы вызова плагинов
Вызов через жизненный цикл:
mvn compile # 触发 maven-compiler-plugin:compile
Прямой вызов цели плагина:
mvn compiler:compile # 直接调用编译目标
Конфигурация параметров командной строки:
mvn compiler:compile -Dmaven.compiler.source=11
Конфигурация пользовательского плагина
Конфигурация параметров
Через настройки тегаconfiguration:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<includes>
<include>**/*Test.java</include> <!-- 只包含特定测试 -->
</includes>
</configuration>
</plugin>Выполнение нескольких целей:
<executions>
<execution>
<id>run-tests</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
Основы разработки плагинов
Концепция Mojo
Java-класс, соответствующий цели плагина, называетсяMojo(Maven plain Old Java Object)。
Должен наследоваться от
AbstractMojoи реализовыватьexecute()метод.
Простой пример плагина
Пример
public class GreetingMojo extends AbstractMojo {
@Parameter(property = "name", defaultValue = "World")
private String name;
public void execute() throws MojoExecutionException {
getLog().info("Hello, " + name + "!");
}
}
Упаковка и установка плагинов
mvn clean install # 将插件安装到本地仓库
Типы плагинов
Maven предоставляет следующие два типа плагинов:
| Type | Описание |
|---|---|
| Плагины сборки | Выполняются во время сборки и настраиваются в pom.xml |
| Плагины отчетности | Выполняются во время генерации сайта и настраиваются в pom.xml |
Ниже приведен список некоторых часто используемых плагинов:
| Плагин | Описание |
|---|---|
| clean | Очищает файлы target после сборки. Удаляет каталог target. |
| compiler | Компилирует исходные файлы Java. |
| surefile | Запускает модульные тесты JUnit. Создаёт отчёты о тестах. |
| jar | Собирает JAR-файл из текущего проекта. |
| war | Собирает WAR-файл из текущего проекта. |
| javadoc | Генерирует Javadoc для проекта. |
| antrun | Запускает набор задач Ant на любой фазе процесса сборки. |
Пример
Мы уже широко использовали в наших примерахmaven-antrun-pluginдля вывода данных в консоль. Пожалуйста, обратитесь к главеMaven - Профили сборки. Давайте лучше разберёмся в этом материале. Создайте файл pom.xml в каталоге C:\MVN\project.
Затем откройте терминал командной строки, перейдите в каталог, где находится pom.xml, и выполните следующую команду mvn.
mvn clean
Maven начнёт обработку и отобразит фазу clean жизненного цикла clean.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
Приведённый выше пример демонстрирует следующие ключевые концепции:
- Плагины определяются в pom.xml с помощью элемента plugins.
- Каждый плагин может иметь несколько целей.
- Вы можете определить фазу, и плагин будет использовать свой элемент phase для начала обработки. Мы использовали фазуclean.
- Вы можете настроить задачи, которые будут выполняться, привязав их к целям плагина. Мы привязали задачуechoк целиrunплагина maven-antrun-plugin.
- Вот и всё. Maven сделает остальное. Он загрузит плагины, которых нет в локальном репозитории, и начнёт обработку.