Maven

Maven — это инструмент для автоматической сборки проектов на основе описания их структуры в специальных файлах на языке POM (Project Object Model) — подмножестве XML.

Чаще всего Maven используют Java-разработчики, однако после установки дополнительных плагинов его также можно применять для работы на PHP, Ruby, Scala, C/C++ и Groovy.

Логотип системы сборки Apache Maven

Зачем разработчики используют Maven

Функциональность системы сборки Maven шире, чем компилятора исходного кода. В процессе работы приложения Apache Maven вызывает компилятор и при этом автоматически управляет зависимостями и ресурсами, например:

  • загружает подходящие версии пакетов;
  • размещает изображения, аудио- и видеофайлы в нужных папках;
  • подгружает сторонние библиотеки. 

Автоматическая сборка приложения особенно важна на этапах разработки, отладки и тестирования — Maven помогает собрать код и ресурсы в исполняемое приложение без IDE (среды разработки). При этом система сборки отличается гибкостью:

  • может использоваться в IDE — Eclipse, IntelliJ IDEA, NetBeans и других;
  • не зависит от операционной системы;
  • не требует установки — архив с программой можно распаковать в любой директории;
  • все необходимые параметры имеют оптимальные настройки по умолчанию;
  • упрощает организацию командной работы и документирование;
  • запускает библиотеки для модульного тестирования;
  • обеспечивает соблюдение стандартов;
  • имеет огромное количество плагинов и расширений.

Также существуют две другие системы сборки Java-приложений — Ant и Gradle, однако Maven пользуется наибольшей популярностью и является стандартом индустрии.

Установка и настройка среды Maven

Установочный файл системы сборки Apache Maven можно скачать с официального сайта. Программа займет около 10 Мб дискового пространства, но для создания локального репозитория потребуется не менее 500 Мб.

Для запуска системы на компьютере пользователя должен быть установлен пакет JDK, а в переменной окружения PATH указан путь к maven/bin. Если архив с Maven распаковали, предположим, в директорию C:\Utils, то путь будет выглядеть так: C:\Utils\maven\bin.

Чтобы установить переменную в Windows 10, нужно перейти в Панель управления Система Дополнительные параметры системы. Затем нажать Переменные среды, найти PATH и выбрать Изменить, после чего добавить путь C:\Utils\maven\bin в конец строки.

Локальный репозиторий

Репозиторий — это место для хранения и обновления файлов проекта. Директория на компьютере разработчика, в которой Maven хранит все jar-файлы отдельного проекта, библиотеки и необходимые модули (зависимости), называется локальным репозиторием. По умолчанию он располагается в папке Libraries\Documents\.m2.

Центральный репозиторий

Это общее онлайн-хранилище, здесь находятся все библиотеки, плагины и модули, созданные разработчиками сообщества Maven. Если во время сборки проекта система не находит нужную библиотеку (зависимость) в локальном репозитории разработчика, она автоматически обращается в центральный репозиторий Maven.

Maven POM

В среде Maven «собранные» проекты называются артефактами, а не приложениями или программами. Термин выбран потому, что готовый проект не всегда является исполняемым приложением — он может быть модулем, плагином или библиотекой.

Для описания структуры проектов Apache Maven применяет разновидность языка XML под названием POM (сокращение от Project Object Model, «объектная модель проекта»). Основные теги POM:

  • project базовый тег, содержит всю информацию о приложении;
  • modelVersion генерируется автоматически, текущая версия — 4.0.0;
  • groupId пакет, к которому принадлежит приложение, с добавлением имени домена;
  • artifactId уникальный ID артефакта;
  • version создается и обновляется автоматически, во время разработки к номеру версии добавляется суффикс -SNAPSHOT.

Информация, заключенная в тегах, является минимально необходимым описанием проекта (minimal POM), представленным в файле pom.xml. Пример POM-файла выглядит так:

<project>
  <modelversion>4.0.0</modelversion>
   <groupid>com.sample.app</groupid>
  <artifactid>new-app</artifactid>
  <version>1.0-SNAPSHOT</version>
</project>

Зависимости (Dependency)

Зависимостями разработчики называют сторонние библиотеки и модули, которые влияют на работоспособность программы. Maven обеспечивает автоматическое управление зависимостью — загружает модули и генерирует их описание в объектной модели проекта. В системе POM используются два тега — dependencies и dependency. Пример описания выглядит так:

<dependencies>
    <dependency>
      <groupid> com.ourcompany.app </groupid>
      <artifactid>our-first-app</artifactid>
      <version>2.0</version>
      <type>war</type>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupid> com.ourcompany.app </groupid>
      <artifactid>our-second-app</artifactid>
      <version>1.0</version>
      <type>bar</type>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

В нем тег <scope>runtime</scope> указывает на то, что зависимость относится к запуску приложения и не требуется для компиляции. В случае использования зависимости для компиляции тег имел бы вид <scope>compile</scope>, а для тестирования приложения — <scope>test</scope>.

Плагин Surefire для тестирования в системе Maven

Для тестирования модулей программы система сборки использует плагин Surefire, который можно загрузить с официального сайта. Отчеты о проверке модулей плагин сохраняет в двух форматах:

  • текст без форматирования .txt;
  • файл .xml.

Если разработчику нужны отчеты в HTML-формате, можно установить дополнительное расширение для Surefire — Maven Surefire Report Plugin. По умолчанию отчеты во всех форматах сохраняются в папке /target/surefire-reports/. Плагин Surefire способен выполнять тестирование проекта как самостоятельно, так и в интеграции с другими популярными фреймворками для проведения тестов Java-приложений, например TestNG и Junit.

Maven упрощает все этапы разработки и сборки

Архетипы и структура проектов

Архетипами в среде Maven называются шаблоны. Образцы шаблонов есть на официальном сайте проекта. С их помощью можно сгенерировать прототипы нескольких проектов — простого приложения, плагина, сайта. Список доступных архетипов получают, выполнив в консоли команду:

mvn archetype:generate

Один из стандартных шаблонов представляет собой традиционнуюпрограмму «Hello, world!». Чтобы скачать архетип в свой локальный репозиторий, нужно выполнить команду:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Скачивание первого шаблона может занять продолжительное время — это происходит потому, что система сборки проверяет доступные обновления и плагины. По умолчанию приложение называется my-app. Перейти в его корневую директорию можно с помощью команды:

cd my-app

Архетипы позволяют начинающим разработчикам быстро познакомиться с необходимой структурой Java-проектов. В директории my-app находятся папки:

src/main/java с исходным кодом проекта;

src/test/java с тестовым кодом.

Для сборки проекта выполните команду:

mvn package

По ней Maven запускает компиляцию артефакта в jar-файл. Готовую программу запускают командой:

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

В результате на экране появится приветствие:

Hello, world!

Intellij IDEA позволяет создавать и запускать проекты без использования консоли. Узнать, как это сделать, можно из видео.

Title Работа с Intellij IDEA. Источник

Maven многократно упрощает процесс разработки и сборки на всех этапах — от структурирования проекта и тестирования кода до «упаковки» готового артефакта. Умение работать с системой сборки необходимо любому Java-разработчику. 

Освойте новую профессию

(рейтинг: 5, голосов: 2)
Добавить комментарий