Что такое плагины в Apache Maven?

«Что такое плагины в Apache Maven?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Плагины (plugins) в Apache Maven — это исполняемые компоненты, которые выполняют конкретные задачи (goals) в процессе сборки проекта. Maven сам по себе является фреймворком, а вся функциональность (компиляция, тестирование, упаковка) реализована через плагины.

Как это работает:

  1. Плагин — это артефакт (JAR), содержащий один или несколько целей (goals).
  2. Цель (goal) — это атомарная задача (например, compile, test).
  3. Фаза (phase) — это этап жизненного цикла сборки (например, compile, package).
  4. На каждой фазе выполняются цели, привязанные к ней из различных плагинов.

Пример конфигурации плагина в pom.xml:

<build>
    <plugins>
        <!-- maven-compiler-plugin привязан к фазе compile -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <!-- Настройки цели 'compile' -->
                <source>17</source>
                <target>17</target>
                <compilerArgs>
                    <arg>-parameters</arg>
                </compilerArgs>
            </configuration>
        </plugin>
        <!-- Плагин для создания исполняемого JAR -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.5.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Типы плагинов:

  • Встроенные (Core): maven-clean-plugin, maven-compiler-plugin, maven-surefire-plugin (тесты), maven-jar-plugin.
  • Сторонние: maven-shade-plugin, spring-boot-maven-plugin, versions-maven-plugin.

Выполнение:

  • Автоматически при запуске фазы: mvn compile (вызовет цель compiler:compile).
  • Явный вызов цели: mvn compiler:compile или mvn surefire:test.