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 имеет предварительно привязанные цели плагинов к фазам жизненного цикла:

Фаза жизненного циклаПривязанная цель плагина
compilemaven-compiler-plugin:compile
testmaven-surefire-plugin:test
packagemaven-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()метод.

Простой пример плагина

Пример

@Mojo(name = "greet", defaultPhase = LifecyclePhase.COMPILE)
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.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.clean</id> <phase>clean</phase> <goals> <goal>запуск</цель> </цели> <конфигурация> <tasks> <echo>clean phase</echo> </задачи> </конфигурация> </выполнение> </выполнения> </плагин> </плагины> </сборка> </проекта>

Затем откройте терминал командной строки, перейдите в каталог, где находится 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 сделает остальное. Он загрузит плагины, которых нет в локальном репозитории, и начнёт обработку.
Другие расширения