-
Notifications
You must be signed in to change notification settings - Fork 56
Краткое введение в maven
Maven - средство сборки приложений с системой управления зависимостями.
Скачать maven можно по адресу http://maven.apache.org/ или в репозитории ОС.
Maven написан на Java, поэтому достаточно скачать maven, распаковать и настроить пути к вызываемому файлу mvn
.
Проверить версию maven можно так:
$ mvn --version
Apache Maven 3.0.4 (r1232337; 2012-01-17 11:44:56+0300)
Maven home: /opt/maven3
Java version: 1.7.0, vendor: Oracle Corporation
Java home: /usr/lib/jvm/jdk1.7.0/jre
Default locale: ru_RU, platform encoding: UTF-8
OS name: "linux", version: "3.5.0-22-generic", arch: "i386", family: "unix"
Логика работы Maven основана на репозиториях. Репозиторий - это хранилище библиотек и плагинов, которые автоматически скачиваются при упоминании в файле описания сборки.
Описание сборки проекта осуществляется в файле pom.xml
, который представляет собой XML-файл с описанием зависимостей, плагинов, целей сборки и т.д.
При сборке проекта Maven проходит несколько фаз сборки, на каждой фазе производится вызов соответствующего плагина.
Все фазы можно разделить на 3 раздела:
- очистка
- сборка
- создание сайта проекта
-
pre-clean
- выполнение предварительных действий для очистки (например, остановка сервисов) -
clean
- удаление всех сгенерированных артефактов -
post-clean
- выполнение действий выполняемых после очистки
-
validate
- проверка возможности проведения сборки (например, наличие установленных всех свойств) -
initialize
- инициализация состояния, свойств и т.д. -
generate-sources
- генерация исходного кода компонент (например, генерация лексического анализатора по файлу грамматики) -
process-sources
- обработка исходников (например, фильтрация или замена значений в исходниках) -
generate-resources
- генерация ресурсов -
process-resources
- обработка ресурсов (например, копирование и замена занчений в ресурсах) -
compile
- компиляция проекта -
process-classes
- постобработка файлов классов (например, обработка java-байткода) -
generate-test-sources
- генерация исходных файлов для тестов -
process-test-sources
- постобработка исходников тестов -
generate-test-resources
- генерация ресурсов для тестирования -
process-test-resources
- постобработка ресурсов -
test-compile
- компиляция исходников тестов -
process-test-classes
- постобработка class-файлов тестов -
test
- проведение unit-тестирования -
prepare-package
- выполнение операций перед упаковкой проекта -
package
- упаковка проекта (получение JAR, WAR, EAR-файла) -
pre-integration-test
- подготовка к проведению интеграционных тестов -
integration-test
- проведение интеграционных тестов -
post-integration-test
- действия после выполнения интеграционных тестов -
verify
- верификация пакета -
install
- установка пакета в локальный репозиторий -
deploy
- публикация пакета в удалённый репозиторий
-
pre-site
- предварительные действия перед созданием сайта -
site
- генерация сайта проекта -
post-site
- действия выполняемые после генерации сайта -
site-deploy
- публикация сайта проекта на web-сервер
Фазы выполняются последованительно, соответственно, для того чтобы выполнить фазу (например, install
) необходимо выполнить все предшествующие фазы.
Одной из сильнейших сторон Maven является наличие широкого выбора плагинов. Вызов плагинов "привязан" к некоторой фазе, например, mvn compile
= mvn compiler:compile
.
У каждого плагина есть набор целей. Цель(goal) плагина - это команда на выполнение.
Например, опишем вызов команды run
у Ant Plugin
на фазу integration-test
.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.integration.test</id>
<phase>integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>in integration-test phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Цели плагинов можно вызывать непосредственно, а не через фазы:
$ mvn compiler:compile
$ mvn exec:java -Dexec.mainClass="com.pkg.App"
$ mvn exec:java -Dexec.mainClass="com.company.App"
$ mvn clean
$ mvn clean install
$ mvn test
$ mvn -Dtest=testClass test
$ mvn -Dtest=testClass#testSomeMethod test
$ mvn -Dtest=testClass#test*Method test
$ mvn site
$ mvn pdf:pdf
$ mvn help:help
$ mvn help:describe -Dplugin=compiler
$ mvn help:describe -Dplugin=compiler -Dfull -Ddetail=true