Skip to content

Краткое введение в maven

KramerIT edited this page Nov 3, 2014 · 14 revisions

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

Создание документации в формате PDF

$ mvn pdf:pdf

Help

$ mvn help:help

Описание плагина (краткое)

$ mvn help:describe -Dplugin=compiler

Описание плагина (полное)

$ mvn help:describe -Dplugin=compiler -Dfull -Ddetail=true
Clone this wiki locally