Maven нужен для управления проектами. Эта технология основана на POM. Ее используют для работы над проектами, зависимостями и документацией. При работе с Java-фреймворками часто приходится работать с несколькими зависимостями. До появления Maven зависимости или файлы JAR (Java ARchive) приходилось добавлять вручную. Этот инструмент же позволяет автоматически добавлять зависимости в проект и собрать его в итоговый файл. В статье рассмотрим установку Apache Maven, терминологию и жизненный цикл проекта.
Apache Maven — что это
Apache Maven помогает управлять файлами и сборками. Он чаще всего используется в Java-фреймворках. Его разработал Apache Software Foundation. Слово Maven на идише означает «сборщик информации».
Maven автоматически загружает JAR-файлы проектов, библиотеки и другие файлы. В файл pom.xml должна быть включена только информация о версии ПО и типе зависимостей.
Зачем нужен
Инструмент используется для:
- быстрой настройки проекта и работы с его структурой;
- упрощения процесса сборки;
- управления зависимостями и работы с автоматическим обновлением;
- работы с несколькими проектами одновременно;
- динамической загрузки необходимых плагинов Java и библиотек из репозитория;
- получения информации о качестве проекта, исследования списков зависимостей, источников с перекрестными ссылками и отчетом о модульном тестировании.
Для каких языков применяется
Maven может управлять проектами на Ruby, C# и других языках. Он отвечает за создание проектов, их зависимостей и документирование.
Установка Maven
Доступна ручная установка или установка с IDE и редактором кода. Первый вариант более сложный, а второй подойдет для новичков.
Ручная установка
Maven — это Java-проект, поэтому перед его установкой на компьютере должен быть установлен пакет JDK.
После установки среды разработки Java вы можете приступить к установке Maven.
- Загрузите последнюю версию с официального сайта.
- Загрузите и сохраните документ apache.maven.zip в подходящем месте.
- Добавьте системную переменную MAVEN_HOME, а затем укажите ее в папке.
- Добавьте %MAVEN_HOME%\bin в PATH.
- Теперь у вас будет доступ к командам mvn. Запустите новую командную строку и введите mvn –version, чтобы убедиться в успешной установке.
Установка при помощи IDE и редакторов кода
Интегрированная среда разработки (IDE) — это среда программирования, упакованная в виде приложения. Она широко используется разработчиками. Maven — это инструмент командной строки, но многие из его команд могут выполняться с помощью IDE.
Популярные IDE для разработчиков — Eclipse, Netbeans и JetBrains Intellij IDEA. Они успешно интегрируются с Maven projects и расширяют проект. Из проекта IDEA разработчик может легко переключиться на командную строку.
Чтобы создать новый проект Maven с помощью Eclipse, необходимо выполнить несколько шагов:
- В Eclipse выберите «Файл» > «Создать» > «Другое», чтобы перейти к окну мастера создания.
- Выберите Maven > Maven Project и нажмите на кнопку «Далее».
- В следующем окне есть опция «Создать простой проект». Отметьте эту опцию, если это Java–проект с поддержкой Maven. Для расширенной настройки этот параметр можно не отмечать. Нажмите «Далее».
- Необходимо заполнить координаты — groupId, artifactId, версия, упаковка.
Настройка среды Maven
В терминале (*unix или Mac) или в командной строке (Windows) перейдите в папку, в которой вы хотите создать Java-проект. Введите эту команду:
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId={maven-template}
-DinteractiveMode=false
Это указывает Maven на необходимость создания Java-проекта на основе шаблона. Например,
D:\>mvn archetype:generate -DgroupId=com.mkyong.hashing -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.992 s
[INFO] Finished at: 2018-09-27T17:15:57+08:00
[INFO] ------------------------------------------------------------------------
Приведенная выше команда генерирует Java-проект из шаблона maven-archetype-quickstart.
Макет каталога Maven. Автоматически будет создана структура каталогов проекта. Исходный код помещается в папку /src/main/java/, код модульного тестирования — в /src/test/java/.
Файл POM. Просмотрите сгенерированный pom.xml. Он совершенно пустой, только одна зависимость от JUnit.
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mkyong.hashing</groupId>
<artifactId>java-project3</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>java-project</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
POM похож на файл Ant build.xml в. В нем описывается вся информация о проекте, начиная от структуры каталогов, плагинов проекта, зависимостей проекта, как создать этот проект.
Добавьте свойства компилятора, указывающие Maven, как использовать указанную версию JDK для компиляции исходного кода.
<properties>
<!-- https://maven.apache.org/general.html#encoding-warning -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Обновите App.java, чтобы он принимал входные данные и хэшировал их с помощью алгоритма SHA-256.
package com.mkyong.hashing;
import org.apache.commons.codec.digest.DigestUtils;
public class App {
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Please provide an input!");
System.exit(0);
}
System.out.println(sha256hex(args[0]));
}
public static String sha256hex(String input) {
return DigestUtils.sha256Hex(input);
}
}
Репозитории Maven
Репозиторий можно назвать каталогом на компьютере. Здесь хранятся файлы проекта, подключаемые модули или другие материалы.
Репозиторий может быть трех типов:
- локальный;
- центральный;
- удаленный.
Когда требуется выполнить поиск зависимостей, сначала выполняется поиск в локальном хранилище. Затем в центральном хранилище. А потом в удаленном хранилище.
Если зависимости не обнаружены ни в одном из трех хранилищ, пользователь получает сообщение об ошибке. Тогда процесс завершается.
Локальный репозиторий
Это каталог на компьютере, в котором хранятся все компоненты проекта. Когда сборка завершена, фреймворк автоматически загружает все файлы зависимостей в локальный репозиторий.
Локальный репозиторий по умолчанию — каталог user_home/m2. Путь по умолчанию можно изменить в settings.xml.
Центральный репозиторий
Если зависимости не найдены в локальном репозитории, фреймворк выполняет поиск в центральном репозитории. Затем он загружает зависимости в локальный. Как и в случае с локальным хранилищем, путь к центральному хранилищу может быть изменен в setting.xml.
Удаленный репозиторий
Он похож на центральный репозиторий. Когда фреймворк хочет загрузить зависимость, она отправляется в удаленный репозиторий. Он находится на веб-сервере и широко используется для размещения внутренних проектов компании.
Терминология Maven
POM. Расшифровывается как Project Object Model. Это XML-файл, содержащий информацию о проекте, зависимости, присутствующие в проекте, каталог исходного файла, информацию о подключаемом модуле. Это данные, необходимые для полной сборки проекта. Фреймворк считывает файл pom, чтобы получить эту информацию.
Идентификатор группы. Он отличает наш проект от всех других проектов. GroupId — это часть файла pom. Его называют идентификатором группы проектов.
ArtifactId. Jar-файл, который развертывается в репозитории. artifactId — часть pom-файла. Часто говорят, что это идентификатор и название проекта.
Версия. Указывает версию jar-файла проекта. Версия также является частью pom-файла.
Центральный репозиторий Maven. В нем содержатся файлы jar, библиотеки, плагины и данные конфигурации, необходимые сервису для создания проекта.
Архетипы Maven
Архетип — это абстракция типа проекта, которая может быть преобразована в конкретный проект. Это шаблон проекта, на основе которого создаются другие проекты.
Основное преимущество использования архетипов в стандартизации разработки проектов заключается в том, что они позволяют разработчикам быстрее запускать свои проекты.
Дескриптор архетипа — это XML-файл с именем archetype-metadata.xml и расположенный в каталоге META-INF/maven jar.
Он используется для описания метаданных архетипов:
<archetype-descriptor
...
name="custom-archetype">
<requiredProperties>
<requiredProperty key="foo">
<defaultValue>bar</defaultValue>
</requiredProperty>
</requiredProperties>
<fileSets>
<fileSet filtered="true" packaged="true">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
<modules>
<module name="sub-module"></module>
</modules>
</archetype-descriptor>
Тег required Properties используется для представления свойств при создании проекта. Нам будет предложено указать значения для них, при этом мы можем выбрать значение по умолчанию.
Жизненный цикл проекта Maven
Maven основан на концепции жизненного цикла сборки. Она определяет порядок выполнения задач. Жизненный цикл по умолчанию состоит из восьми основных этапов: проверки, компиляции, тестирования, упаковки, интеграционного тестирования, верификации, установки и развертывания. Каждая фаза представляет собой определенные этапы процесса сборки и имеет свой собственный набор целей, которые необходимо выполнить.
Зависимости
Зависимость — это внешний объект или библиотека, от которых зависит компиляция, сборка и выполнение проекта. В Java чаще всего зависимость — это JAR. Файл содержит уже готовый код или другие ресурсы, необходимые для проекта. Зависимости определяются в POM (Project Object Model).
POM же определяет внешние артефакты и версии этих артефактов. Когда вы создадите проект, система сборки автоматически загрузит и включит эти зависимости. Это гарантирует, что ваш проект будет иметь доступ к классам и ресурсам. Зависимости помогают проекту быть модульным, поддерживаемым и многократно используемым. Благодаря им программисты легко могут интегрировать в свои проекты внешние функциональные возможности.
Плагины
Во фреймворке есть два типа плагинов:
- Build — выполняется в процессе сборки. Примеры: Clean, Install и Surefire. Они должны быть настроены в разделе сборки POM;
- Reporting — выполняется во время создания сайта для создания различных отчетов по проекту. Примеры: Javadoc и Checkstyle. Они настраиваются в разделе отчетов POM проекта.