Руководство по Maven. Плагины.

Если говорить в целом, то Maven – это фреймворк, который выполняет плагины. В этом фреймворке каждая задача, по сути своей, выполняется с помощью плагинов.

Плагины Maven использутся для:

  • создания jar – файла
  • создания war – файла
  • компиляции кода файлов
  • юнит-тестирования кода
  • создание отчётов проекта
  • создание документации проекта

В общей форме, плагин обеспечивает набор целей, которые могут быть выполнены с помощью такого синтаксиса:


mvn [имя-плагина]:[имя-цели]

Например, для того, чтобы выполнить компиляцию проекта нам необходимо использовать следующую команду:


mvn compiler:compile


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

Существует два типа плагинов в Maven:

  • Плагины сборки
    Выполняются в процессе сборки и должны быть конфигурированны внутри блока <build></build> файла pom.xml
  • Плагины отчётов
    Выполняются в процесса генерирования сайта и должны быть конфигурированны внутри блока <reporting></reporting> файла pom.xml.

Вот список, наиболее используемых плагинов:

  • clean
    Очищает цель после сборки. Удаляет директорию target.
  • compiler
    Компилирует исходные Java файлы.
  • surefire
    Запускает тесты JUnit. Создаёт отчёты о тестировании.
  • jar
    Собирает JAR файл текущего проекта.
  • war
    Собирает WAR файл текущего проекта.
  • javadoc
    Генерирует Javadoc проекта.
  • antrun
    Запускает набор задач ant из любой указанной фазы.

Для понимания того, как это работает на практике, рассмотрим следующий пример.

Пример:


<?xml version="1.0" encoding="UTF-8"?>
<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>ProselyteTutorials</groupId>
    <artifactId>MavenTutorial</artifactId>
    <version>1.0-SNAPSHOT</version>
    <profiles>
        <profile>
            <id>test</id>
            <activation>
                <file>
                    <missing>target/generated-sources/some/dir/net/proselyte/maven</missing>
                </file>
            </activation>
        </profile>
    </profiles>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <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>compile</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo>compile phase</echo>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

После этого выполним в терминале следующую команду:


mvn compile

В результате выполнения команды, мы получим, примерно, следующий результат:


[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building MavenTutorial 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ MavenTutorial ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.0.2:compile (default-compile) @ MavenTutorial ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-antrun-plugin:1.1:run (id.clean) @ MavenTutorial ---
[INFO] Executing tasks
     [echo] compile phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.620s
[INFO] Finished at: Wed Apr 27 16:21:41 EEST 2016
[INFO] Final Memory: 6M/150M
[INFO] ------------------------------------------------------------------------

Пример, приведённый выше, демонстрирует следующие ключевые концепции:

  • Плагины указываются в файле pom.xml внутри блока <plugins></plugins>
  • Каждый плагин может иметь несколько целей.
  • Мы можем определять фазу, из которой мы можем начать выполнение плагина. В примере выше мы использовали фазу compile.

На этом мы заканчиваем изучение плагинов.

В следующем уроке мы рассмотрим создание проекта Maven.