Какие типы плагинов существуют в maven
Перейти к содержимому

Какие типы плагинов существуют в maven

  • автор:

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

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

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

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

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

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

 mvn compiler:compile  

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

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

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

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

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

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

   4.0.0 ProselyteTutorials MavenTutorial 1.0-SNAPSHOT  test  target/generated-sources/some/dir/net/proselyte/maven      junit junit 3.8.1 test     org.apache.maven.plugins maven-antrun-plugin 1.1  id.clean compile run   compile phase          

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

 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 внутри блока
  • Каждый плагин может иметь несколько целей.
  • Мы можем определять фазу, из которой мы можем начать выполнение плагина. В примере выше мы использовали фазу compile.

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

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

Maven в вопросах и ответах

На странице рассмотрены следующие вопросы использования фреймворка Maven :

  1. Команда создания нового проекта
  2. Структура файла описания проекта pom.xml
  3. GAV-параметры и полное наименование артефакта
  4. Назначение SNAPSHOT
  5. Область действия зависимости scope
  6. Использование внешних зависимостей
  7. Транзитивные зависимости
  8. Maven плагины
  9. Порядок выполнения maven команды
  10. Тестирование maven проекта
  11. Maven репозитории
  12. Предопределёные переменные в файле pom.xml

Команда создания нового проекта

Для создания нового проекта используется плагин archetype с целью (goal) generate. В команде необходимо указать параметры GAV (groupId, artifactId, version) и тип артефакта archetypeArtifactId. Количество разнотипных артефактов у фреймворка maven огромно. Пример копирования наименований архитипов в файл и создания простого maven-проекта :

1. Копирование наименований архитипов в файл mvn archetype:generate > archetypes.txt 2. Создание простого maven проекта mvn archetype:generate \ -DgroupId=com.example \ -DartifactId=framework-factory \ -Dversion=1.0.0 \ -DarchetypeArtifactId=maven-archetype-quickstart

Структура файла описания проекта pom.xml

При описании проекта в файле pom.xml используются следующие теги и секции :

project элемент верхнего уровня, описание проекта;
GAV-параметры параметры проекта;
url интернет-страница проекта;
properties секция свойств проекта;
repositories секция репозиториев;
dependencies секция определения зависимостей проекта;
build описание сборки проекта

Не все секции файла описания проекта pom.xml являются обязательными.

GAV-параметры и полное наименование артефакта

Параметры артефакта GAV включают groupId, artifactId, version. Полное имя артефакта (координата) представляет четыре слова, разделенные знаком двоеточия в следующем порядке groupId:artifactId:packaging:version.

Назначение SNAPSHOT

SNAPSHOT используется в определении версии артефакта и обозначает незавершенность её разработки. При каждой сборке проекта maven проверяет наличие обновленной версии snapshot артефакта в удалённом репозитории и подгружает последний.

Область действия зависимости scope

Область действия зависимости scope определяет этап жизненного цикла проекта, в котором эта зависимость будет использоваться. Maven использует 6 областей :

  • compile — область по умолчанию, использутся, если scope не определена. Compile зависимости доступны во всех classpath проекта;
  • provided — очень похоже на compile, но эта зависимость в сборку не попадает. Предполагается, что зависимость (артефакт) уже присутствует в JDK или в WEB-контейнере. Эта область доступна только на этапах компиляции и тестирования и не является транзитивной;
  • runtime — зависимость с данной областью видимости не обязательна для compilation и используется в фазе выполнения;
  • test — зависимость используется при тестировании кода приложения;
  • system — область похожа на provided за исключением того, что необходимо определить физическое расположение артефакта на диске. Артефакт с этой областью видимости maven не ищет в репозитории;
  • import — эта область используется в зависимости секции при сложных связях (см. dependencyManagement).

Использование внешних зависимостей

В качестве внешних зависимостей, как правило, используются собственные разработки, не размещаемые в центральном и локальном репозиториях. Внешние зависимости определяются в файле pom.xml также, как и другие зависимости – необходимо определить параметры GAV (groupId, artifactId, version) и область видимости scope как system. В теге необходимо указать абсолютный путь к файлу.

  ru.carousel carousel-lib 1.0.0 system d:/projects/libs/carousel-lib.jar   

Транзитивные зависимости

Транзитивные зависимости позволяют избегать необходимости дополнительного указания в секции dependencies библиотек, которые требуются для самой зависимости, и maven включает их в проект автоматически. При разрешении конфликта версий используется принцип «ближайшей» зависимости, то есть выбирается зависимость, путь к которой через список зависимых проектов является наиболее коротким.

Команды «mvn depenency:list» и «mvn dependency:tree» позволяют вывести в консоль зависимости в виде списка или дерева соответственно.

Maven плагины

Maven использует два типа плагинов :

  • плагины сборки (build plugins) — определяются в секции файла pom.xml и выполняются в процессе сборки;
  • плагины отчётов (reporting plugins) — определяются в секции файла pom.xml и выполняются в процесса генерирования сайта.

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

  • сборки проекта – cоздание файлов jar, war, ear;
  • компиляции исходных кодов проекта (java файлов);
  • тестирования модулей проекта – запуск JUnit тестов;
  • формирования отчётов проекта;
  • создания документации проекта.

Порядок выполнения maven команды

Как будет выполнена следующая команда

mvn clean dependency:copy-dependencies package

Аргументы clean и package являются фазами сборки проекта, «dependency:copy-dependencies» представляет собой задачу, которую выполняет плагин dependency для цели copy-dependencies (копирование зависимостей проекта в поддиректорию target/dependency).

Maven сначала выполнит фазу очистки clean, после этого будут скопированы зависимости «dependency:copy-dependencies», и в завершении выполнится сборка проекта.

Тестирование проекта

Для выполнения JUnit тестов проекта необходимо выполнить команду «mvn test». Чтобы выполнить определенный тест необходимо в командной строке указать полный путь [-Dtest=package.test-class] к конкретному тесту, например :

mvn test -Dtest=com.example.TestConnection

Для запуска сборки проекта с предварительной очисткой поддиректории «target» без выполнения тестов используйте следующую команду :

mvn clean package -Dmaven.test.skip=true

Выполнение тестов можно запретить в секции «properties» файла pom.xml. Для этого можно использовать тег или . Например :

 true  

Примечание : помните, что запретив выполнение тестов в файле pom.xml, нельзя будет выполнять тесты с помощью Maven.

Maven репозитории

Под репозиторием (repository) понимается, как правило, внешние центральные хранилища артефактов, в которых собрано огромное количество наиболее популярных и востребованных библиотек, и локальное хранилище ($\.m2\repository), в котором хранятся копии используемых ранее библиотек. Кроме этого, можно создать репозиторий в самом maven-проекте.

Используемые в проекте внешние репозитории описываются в секции :

  repo1.maven.org http://repo1.maven.org/maven2   

Предопределёные переменные в файле pom.xml

При описании проекта в файле pom.xml можно использовать переменные, на которые можно сослаться с помощью префиксов «project.» или «pom.» Наиболее часто используемые элементы :

  • $ — «target» директория, или тоже самое $ ;
  • $ — путь к директории куда компилятор складывает файлы по умолчанию «target/classes»;
  • $ — наименование проекта;
  • $ — версия проекта.

Какие типы плагинов существуют в maven

Apache Maven (Часть 1): Основы
Apache Maven
(Часть 1): Основы

Apache Maven (обычно называют просто Maven) — это фреймворк по автоматизации и управлению сборкой Java-приложений. Слово Maven взято из языка идиш, примерный перевод которого можно выразить как «собиратель знания» (accumulator of knowledge), «эксперт».

Apache Maven, по большей части, написан на Java. Это проект с открытым исходным кодом, который следует философии «Соглашение важнее конфигурации» (convention over configuration).

1. Основные возможности Maven
Наиболее важные возможности Maven:

  • Простая настройка проекта в соответствии с лучшими практиками
  • Управление зависимостями, включая автоматическое обновление
  • Возможность работать с несколькими проектами одновременно
  • Большое хранилище библиотек и метаданных для использования «из коробки»
  • Расширяемость с возможностью написания своих плагинов
  • Создание сайта и PDF с документацией
  • Проверка корректности структуры проекта
  • Компиляция исходного кода, отображение ошибок/предупреждений
  • Тестирование проекта на основе уже написанных тестов
  • Упаковка скомпилированного кода в артефакты (например, .jar, .war, .ear, .zip-архивы и многое другое)
  • Упаковка исходного кода в загружаемые архивы/артефакты
  • Установка упакованных артефактов на сервер для последующего развертывания (деплоя) или в репозиторий для распространения
  • Создание отчетов по тестированию
  • Сообщение об удачной/неудачной сборке проекта

2. Принцип «Соглашение важнее конфигурации»

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

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

Одной из таких настроек по умолчанию, например, является структура каталогов в Maven-проекте (подробнее о стандартных каталогах):

В этой структуре исходный код, в соответствии с соглашением, располагается в подкаталоге src/main/java. В каталоге test находится код тестов.

Аналогичным образом ресурсы, необходимые для приложения или его тестирования, находятся в каталоге resources.

Это всего лишь один из множества примеров стандартизации в соответствии с философией «Соглашение важнее конфигурации».

3. Как работает Maven?

Maven использует объектную модель проекта (Project Object Model, POM) для управления проектом. Для описания модели обычно используется XML-документ, но возможны и другие форматы.

Рисунок, иллюстрирующий типичную работу Maven
4. Что такое Объектная модель проекта (POM)?

POM — это очень полезная и удобная вещь, которая описывает то, как будет собираться проект. Этот файл (обычно pom.xml) состоит из следующих частей:

  • Project coordinates (координаты проекта) — однозначно идентифицируемый набор свойств, с помощью которых артефакты проекта могут быть использованы в другом месте
  • Dependencies (зависимости) — библиотеки и код, необходимые для сборки проекта
  • Plugins (плагины) — вспомогательные инструменты при сборке проекта
  • Properties (свойства) — общие значения, необходимые проекту
  • Inheritance details (детали наследования) — возможность создания иерархии для повторно используемых компонентов POM
  • Profiles (профили) — альтернативные пути сборки проекта, разбитые по профилям

4.1. Как Maven взаимодействует с POM?

Maven использует содержимое в POM для управления сборкой. Однако он также имеет стандартные значения по умолчанию. Таким образом, Maven несет ответственность за объединение значений по умолчанию и применение переопределений и дополнений, обнаруженных в pom-файле проекта.

Благодаря этому мы получаем:

  • совокупность шагов выполнения, свойств и профилей
  • контент, который Maven может выполнить для проекта
  • исчерпывающий набор зависимостей и плагинов, необходимых для такого выполнения
  • определение любых переходных зависимостей (например, зависимости зависимостей)
  • разрешение конфликтов с точки зрения версий зависимостей

4.2. Как Maven собирает POM?

Maven собирает свой POM, проходя слои, которые действуют как строительные блоки. Каждый используемый слой имеет возможность переопределять или дополнять содержимое того, что станет POM. Родительские файлы, спецификации и файлы POM-проекта — это то, где можно переопределить настройки Maven по умолчанию.

Теперь пройдемся по существующим слоям:
Внутренние настройки Maven

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

Maven Super POM

Этот супер-POM также является частью кода Maven. Опять же, если цель не состоит в том, чтобы изменить исходник, то также можно считать, что Super POM является неизменяемым.

Глобальные настройки Maven

После установки Maven создает структуру каталогов. Одним из базовых каталогов является conf, содержащий файл глобальных настроек settings.xml. Поскольку этот файл существует на локальном компьютере, он доступен для редактирования. Как правило, любые параметры, которые применяются ко всем проектам, управляемым на конкретном компьютере, прописываются в этом глобальном settings.xml. Например, в этот файл входят такие параметры, как настройки прокси-сервера, URL-адреса корпоративных серверов, зеркала и т. д. В любом случае его не следует часто изменять.

Расположение:
Unix/MacOS: /conf/settings.xml
Windows:
Пользовательские настройки Maven

Аналогично глобальным настройкам, но в другом месте, можно создать файл пользовательских настроек. Этот файл также называется settings.xml, но его местоположение находится в папке пользователя (user home) в каталоге .m2 (скрытая папка). Данный файл предназначен для настройки любых параметров, применимых к проектам. Управляется конкретным пользователем (на данном компьютере может быть несколько пользователей). Это могут быть имена пользователей и пароли для подключения к сети, параметры репозитория и т. д.

Расположение:
Unix/MacOS: /.m2/settings.xml
Windows: \.m2\settings.xml

Родительские POM’ы / спецификации

Maven позволяет наследовать содержимое от родительского POM и характеристики версий из pom-спецификации. Обычно родительские POM содержат повторно используемые зависимости, плагины и свойства, используемые POM проекта. POM-спецификации (Bill-of-Material — BOM) — это специализированный POM, который позволяет группировать версии зависимостей. Использование POM-спецификации избавляет разработчика от необходимости проверять совместимость различных зависимостей. Изменение любого из них возможно, если есть необходимость и право на изменение. Поскольку изменения в любом из них могут повлиять на несколько других проектов, для изменений рекомендуется соответствующее увеличение версий и их пересмотр.

Расположение:
Различные места на компьютере или в каком-либо репозитории.
Project POM

Это Project Object Model для проекта. В этом месте подробно описаны инструкции Maven для конкретного проекта. Типичное содержимое включает в себя: уникальный набор координат, используемых для идентификации проекта; название и описание проекта; набор разработчиков, связанных с проектом; любые сведения об управлении системой контроля версиями; все зависимости и плагины для конкретного проекта; любые профили, которые позволяют поочередно выполнять Maven в этом проекте и так далее. Все это будет описано в последующих статьях. Файл, содержащий этот POM, называется pom.xml, но можно использовать и другие имена. Если используется альтернативное имя, то исполняемому файлу Maven необходимо будет указать имя файла для выполнения.

Расположение:
Unix/MacOS: $PROJECT/pom.xml
Windows: $PROJECT\pom.xml

6. Координаты зависимостей

Существуют сотни или тысячи проектов, которые собраны в артефакты. Некоторые из этих артефактов потенциально могут быть использованы в текущем проекте в качестве библиотек. Например, проект может зависеть от логирования или библиотеки JSON. В центральном репозитории можно разместить множество артефактов зависимостей. Основное такое хранилище Maven называется Maven Central. Существует также множество других подобных хранилищ.

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

Что такое координаты Maven?

Это способ уникальной идентификации артефакта. Существуют три основные координаты, которые используются для идентификации артефакта.

groupId

Классификация по группе, обычно относящаяся к организации или компании и может иметь общее название для одного или нескольких проектов. groupId обычно описан через точку (аналогично имени пакета Java). Каждый элемент в этой точечной нотации соответствует каталогу в древовидной структуре хранилища. Например, groupId в org.apache.commons соответствует $REPO/org/apache/commons.

Наличие точечной нотации не является обязательным требованием (хотя очень рекомендуется).
artifactId

Это точное название проекта. Среди множества проектов, существующих в группе, artifactId может однозначно идентифицировать артефакт. Если название состоит из нескольких слов, то в описании artifactId оно разделяется дефисами. В идеале, имена должны быть небольшой длины.

Артефакт проявляется в виде подкаталога в дереве каталогов, представленного groupId. Например, artifactId commons-lang3 в groupId org.apache.commons сообщает, что артефакт можно найти в разделе: $REPO/org/apache/commons/commons-lang3/.

version

Это идентификатор, который отслеживает уникальные сборки артефакта. Версия — это строка, созданная разработчиками проекта для определения набора изменений, внесенных в предыдущее создание артефакта того же проекта. Настоятельно рекомендуется следовать схемам семантического управления версиями, хотя это не обязательно.

Версия проявляется в виде подкаталога в дереве каталогов, который состоит из groupId и artifactId. Например, version 3.1.0 для artifactId commons-lang3 в groupId org.apache.commons обозначает, что артефакт находится в $REPO/org/apache/commons/commons-lang3/3.1.0/.

Теперь немного подробнее про версии.
Схемы номеров версий

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

Цикл разработки

Во время разработки продукта может быть создано несколько артефактов, которые можно протестировать, проверить и т. д. Этот цикл разработки обычно создает артефакты с той же версией, что и предыдущие сборки на том же этапе. Основанием для этого утверждения является то, что релиз все еще находится в экспериментальном, бета- или альфа-состоянии, но может претерпеть дополнительные изменения. Однако трудно заставить все проекты постоянно обновлять свои собственные POM для каждой такой сборки. В этой проблеме помогает создание SNAPSHOT’ов (снимков).

Например, для проекта A версии 1.0.0 команда разработчиков может создать несколько версий SNAPSHOT’ов с версией 1.0.0-SNAPSHOT в течение определенного периода времени. Этот суффикс подразумевает, что номер версии в конце должен быть 1.0.0, однако при каждой сборке будут создаваться новые артефакты, которые заменят предыдущий SNAPSHOT. Более новый SNAPSHOT может заменить существующий SNAPSHOT артефакта в репозитории Maven, поэтому пользовательские проекты могут безопасно получить последнюю версию SNAPSHOT’а. SNAPSHOT — это изменяемая версия проекта, которая может быть объявлена как зависимость в пользовательских проектах.

Готово для выпуска в продакшн (Production-Ready)

После завершения всего тестирования POM больше не нуждается в суффиксе SNAPSHOT и может создать готовую к продакшену неизменяемую версию проекта. Как только она будет помещена в репозиторий, в нее нельзя вносить никаких дальнейших изменений (Maven не позволяет это делать по своим внутренним правилам). Обычно можно найти другие готовые к производству суффиксы: 1.0.0-GA (общая доступность) или 1.0.0-RELEASE (выпущенный артефакт) или 1.0.0-FINAL и т. д. Опять же, строки версий вообще не имеют значения для Maven.

MAVEN¶

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

  • Компиляция исходного кода в бинарный код
  • Сборка бинарного кода
  • Выполнение тестов
  • Разворачивание программы на производственной платформе
  • Написание сопроводительной документации или описание изменений новой версии

Что такое Maven? Как он работает?¶

Apache Maven — это фреймворк для автоматизации сборки проектов, компиляции, создания jar, создания дистрибутива программы, генерации документации. Если собирать большие проекты с командной строки, то команда для сборки будет очень длинной, поэтому её иногда записывают в bat/sh скрипт. Но такие скрипты зависят от платформы. Для того чтобы избавиться от этой зависимостии и упростить написание скрипта используют инструменты для сборки проекта. Maven, обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его декларативное описание, а не отдельные команды. Все задачи по обработке файлов Maven выполняется через плагины.

Какие преимущества Maven?¶

Основные преимущества Maven:

  • Независимость от OS. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же.
  • Управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек(зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями. Что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.
  • Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере (Continuous Integration).
  • Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты которые собираются c помощью maven. При этом зачастую проект настраивать не нужно — он сразу готов к дальнейшей разработке.
  • Как следствие — если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же — меньше дублирования данных и соответственно ошибок.
  • Декларативное описание проекта.

Какие недостатки Maven?¶

  • Неочевидность. Если в Ant указывается команда на удаление — и удаляется файл, то в случае Maven надо всем сердцем довериться плагину и документации по нему.
  • При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, если потребуется собирать даже не самое сложное приложение куда выше, чем у Ant.
  • Если нужно найти какой-то специальный плагин — это будет сделать непросто, плагинов много. И не факт, что найденный подойдёт на все 100% и будет работать без ошибок.
  • Нужен доступ в интернет (или придётся разворачивать собственный репозиторий, что трудоёмко)
  • Большие трудности, если проект не типовий.

Какими аспектами управляет Maven?¶

Вот основные аспекты, которыми позволяет управлять Maven:

  • Создание (Build)
  • Документирование (Documentation)
  • Отчёты (Reporting)
  • Зависимости (Dependencies)
  • Релизы (Releases)
  • SCM
  • Список рассылки (Mailing list)
  • Дистрибьюция (Distribution)

Как узнать какую версию Maven вы используете?¶

С помощью следующий команды:

mvn --version

Для чего создан Maven?¶

Основной целью Maven является предоставление разработчику:

  • Понятной модели для проектов, которая может быть использовано повторно и была бы проста в поддержании.
  • Плагины, которые могут взаимодействовать с этой моделью.

Структура и сожержание проекта Maven указывается в специальном xml-файле, который назывется Project Object Model (POM), который является базовым модулем всей системы.

Какая структура каталогов в Maven?¶

В Maven стандартная структура каталогов, благодаря ей отпадает необходимость прописывать пути к файлам проекта. В корневом каталоге проекта находится pom.xml и несколько текстовых файлов. Всё остальное хозяйство аккуратно разложено в подкаталогах. Главные из них — src и target. Однако, порядок сохраняется и вглубь:

Где вы хранятся файлы классов при компиляции проекта Maven?¶

Файлы классов хранятся в:

$/target/classes/.

Что такое pom.xml?¶

pom.xml — это XML-файл, который содержит информацию о деталях проекта, и конфигурации используемых для создания проекта на Maven. Он всегда находится в базовом каталоге проекта. Этот файл также содержит задачи и плагины. Во время выполнения задач, Maven ищет файл pom.xml в базовой директории проекта. Он читает его и получает необходимую информацию, после чего выполняет задачи. Корневой элемент , схема, которая облегчает редактирование и проверку, и версия pom.xml. Внутри тега project содержится основная и обязательная информация о проекте.

Какую информацию содержит pom.xml?¶

Среди информации которую содержит pom.xml мы можем выделить следующие:

  • Зависимости проекта (project dependencies)
  • Плагины (plugins)
  • Задачи/цели (goals)
  • Профиль создания (build proÙles)
  • Версия проекта (project version)
  • Разработчики (developers)
  • Список рассылки (mailing list)

Что такое супер POM?¶

Все POM — файлы являются наследниками родительского pom.xml. Этот POM-файл называется Super POM и содержит значения, унаследованные по умолчанию.

Какие элементы необходимы для минимального POM?¶

Требуемые элементы для минимального POM ето корневий елемент, modelVersion, GroupID, artifactID и версия. Минимальный POM файл:

Что такое зависимости в Maven?¶

Зависимость (dependency) — это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования.

Что такое артефакт в Maven?¶

Артефакт (artefact) — это, по сути, любая библиотека, хранящаяся в репозитории (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитории Maven. Каждый артефакт содержит group ID, artifact ID и версию.

Что такое плагин в Maven?¶

Плагин (plugin) — это зависимости Maven’а, расширяющие его функционал.

Что такое задача в Maven?¶

Задача (goal) — это специальная задача, которая относится к сборке проекта и его управлению. Она может привязываться как к нескольким фазам, так и ни к одной. Задача, которая не привязана ни к одной фазе, может быть запущена вне фаз сборки с помощью прямого вызова.

Что такое архетип в Maven?¶

Архетип (archetype) — это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов.

Что такое репозиторий в Maven?¶

Репозиторий (repository) — глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины.

Какие типы репозитория существуют в Maven?¶

В Maven существуют три типы репозитория:

  • Локальный (local) репозиторий — это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven. По умолчанию она расположена в /.m2/repository — персональная для каждого пользователя.
  • Центральный (central) репозиторий — это репозиториий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек. Который расположен в http://repo1.maven.org/maven2/ и доступен на чтение для всех пользователей в интернете. Если Maven не может найти зависимости в локальном репозитории, то автоматически начинается поиск необходимых файлов в центральном репозитории
  • Удалённые (remote) репозиторий — иногда, Maven не может найти необходимые зависимости в центральном репозитории. В этом случае, процесс сборки прерывается и в консоль выводится сообщение об ошибке. Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм Удалённого репозитория, который является репозиторием, который определяется самим разработчиком. Там могут храниться все необходимые зависимости.

Какая команда устанавливает JAR-файл в локальное хранилище?¶

Какой порядок поиска зависимостей Maven?¶

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

  1. Поиск зависимостей в локальном репозитории Если зависимости не обнаружены, происходит переход к шагу 2.
  2. Поиск зависимостей в центральном репозитории. Если они не обнаружены и удалённый репозиторий определён, то происходит переход к шагу 4.
  3. Если удалённый репозиторий не определён, то процесс сборки прекращается и выводится сообщение об ошибке.
  4. Поиск зависимостей на удалённом репозитории, если они найдены, то происходит их загрузка в локальный репозиторий, если нет — выводится сообщение об ошибке.

Какие два файла настройки есть в Maven, как они называются и где расположены?¶

В Maven, файлы настройки называются settings.xml, и они расположены в двох местах:

  • Каталог где установлен Maven: $M2_Home/conf/settings.xml
  • Домашняя директория пользователя: $/.m2/settings.xml

Что такое жизненный цикл сборки в Maven?¶

Жизненный цикл сборки(Lifecycle) — это чётко опредлённая последовательность фаз во время выполнения которых должын быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла.

Назовите основные фазы жизненного цикла сборки Maven?¶

Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз.
В Maven есть следующие 3 стандартных жизненных цикла:

  • Очистка (clean) — очищает артефакты, созданные до сборки.
  • Сборка (default or build) — используется для создания приложения.
  • Создание сайта проекта (site) — генерирует документацию сайта для проекта.

Что делает команда mvn site?¶

mvn site — создает веб-сайт проекта.

Что делает команда mvn clean?¶

mvn clean — эта команда очищает целевую директорию от созданных в процессе сборки файлов.

Из каких фаз состоит жизненный цикл сборки Clean?¶

Жизненный цикл сборки Clean состоит из следующих этапов:

Из каких фаз состоит жизненный цикл сборки Default (Build)?¶

Default (Build) — это основной жизненный цикл Maven, который используется для сборки проектов. Он включает в себя 23 фазы:

  • validate — проверяет корректность метаинформации о проекте, подтверждает, является ли проект корректным и вся ли необходимая информация доступа для завершения процесса сборки.
  • initialize — инициализирует состояние сборки, например, различные настройки. generate-sources — включает любой исходный код в фазу компиляции.
  • generate-sources — включает любой исходный код в фазу компиляции.
  • process-sources — обрабатывает исходный код (подготавливает). Например, фильтрует определённые значения.
  • generate-resources — генерирует ресурсы, которые должны быть включены в пакет.
  • process-resources — копирует и отправляет ресурсы в указанную директори. Это фаза перед упаковкой.
  • compile — комплирует исходный код проекта.
  • process-classes — обработка файлов, полученных в результате компляции. Например, оптимизация байт-кода Java классов.
  • generate-test-sources — генерирует любые тестовые ресурсы, которые должны быть включены в фазу компиляции.
  • process-test-sources — обрабатывает исходный код тестов. Например, фильтрует значения.
  • test-compile — компилирует исходный код тестов в указанную директорию тестов.
  • process-test-classes — обрабатывает файлы, полученные в результате компиляции исходного кода тестов.
  • test — запускает тесты классов, используя приемлемый фреймворк юниттестирования (например, Junit).
  • prepare-package — выполняет все необходимые операции для подготовки пакета, непосредственно перед упаковкой.
  • package — преобразует скомпилированный код и пакет в дистрибутивный формат. Такие как JAR, WAR или EAR.
  • pre-integration-test — выполняет необходимые действия перед выполнением интеграционных тестов.
  • integration-test — обрабатывает и распаковывает пакет, если необходимо, в среду, где будут выполняться интеграционные тесты.
  • post-integration-test — выполняет действия, необходимые после выполнения интеграционных тестов. Например, освобождение ресурсов.
  • verify — выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества.
  • install — переносит пакет в локальный репозиторий, откуда он будет доступен для использования как зависимость в других проектах.
  • deploy — копирует финальный пакет (архив) в удалённый репозиторий для, того, чтобы сделать его доступным другим разработчикам и проектам.

Здесь также необходимо уточнить два момента:

  • Когда мы выполняем команду Maven, например install, то будут выполенны фазы до install и фаза install.
  • Различные задачи Maven будут привязаны к различным фазам жизненнго цикла Maven в зависимости от типа архива (JAR/WAR/EAR).

Из каких фаз состоит жизненный цикл сборки Site?¶

Жизненный цикл сборки Site состоит из следующих этапов:

  • pre-site
  • site
  • post-site
  • site-deploy

Что сделает эта команда «mvn clean dependency:copy-dependencies package»?¶

Порядок выполнения зависит от порядка вызова целей и фаз. Рассмотрим данную команду. Аргументы clean и package являются фазами сборки до тех пор, пока «dependency:copy-dependencies» является задачей. В этом случае, сначала будет выполнена фаза clean, после этого будет выполнена задача «dependency:copydependencies». После чего будет выполнена фаза package.

Что такое профиль сборки (Build Profile)?¶

Профиль сборки — это множество настроек, которые могут быть использованы для установки или перезаписи стандартных значений сборки Maven. Используя профиль сборки Maven, мы можем настраивать сборку для различных окружений, таких как:

  • Разработка или Продакшн.
  • Профили настраиваются в файле pom.xml с помощью элементов activeProfiles /profiles и запускаются различными методами.

Какие типы профилей сборки (Build Profiles) вы знаете?¶

В Maven существует три основных типа профилей сборки:

  • Per Project — определяется в POM файле, pom.xml
  • Per User — определяется в настройках Maven — xml файл ( USER_HOME /.m2/settings.xml).
  • Global — определяется в глобальных настройках — xml файл ( M2_HOME /conf/settings.xml).

Как вы можете активировать профили сборки?¶

Профиль сборки Maven может быть активирован различными способами:

  • Использованием команды в консоли.
  • С помощью настроек Maven.
  • С помощью переменных окружения.
  • Настройках ОС.
  • Существующими, отсутствующими файлами.

Для чего используются Maven плагины?¶

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

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

Какие типы плагинов существуют в Maven?¶

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

  • Плагины сборки (Build plugins) — выполняются в процессе сборки и должны быть конфигурированны внутри блока файла pom.xml.
  • Плагины отчётов (Reporting plugins) — выполняются в процесса генерирования сайта и должны быть конфигурированны внутри блока файла pom.xml.

Когда Maven использует внешние зависимости?¶

Если необходимые файлы не найдены ни в центральном, ни на удалённом репозитории, тогда для решения этой проблемы используются внешние зависимости.

Что нужно определить для внешней зависимости?¶

Внешние зависимости могут быть сконфигурированы в файле pom.xml таким же образом, как и другие зависимости, для этого:

  • Определите groupId таким же именем, как и имя файла.
  • Определите artifactId таким же именем, как и имя файла.
  • Определите область видимости зависимости, как system.
  • Укажите абсолютный путь к файлу.

Какая команда создает новый проект на основе архетипа?¶

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

mvn archetype:generate

Что такое SNAPSHOT в Maven?¶

SNAPSHOT — это специальная версия, которая показывает текущую рабочую копию. При каждой сборке Maven проверяет наличие новой snapshot версии на удалённом репозитории.

В чем разница между snapshot и версией?¶

В случае с версией, если Maven однажды загрузил версию data-service:1.0, то он больше не будет пытаться загрузить новую версию 1.0 из репозитория. Для того, чтобы скачать обновлённый продукт data-service должен быть обновлён до версии 1.1.

В случае со snapshot, Maven автоматически будет подтягивать крайний snapshot (data-service:1.0-SNAPSHOT) каждый раз, когда будет выполнятся сборка проекта.

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

Как Maven определяет какую версию зависимостей использовать когда встречается множественный вариант выбора?¶

Dependency mediation — определяет, какая версия зависимости будет использоваться, когда встречается несколько версий артефактов, если две версии зависимости на той же глубине в дереве зависимостей, то будет использоваться та которая объявлена первой. Здесь важен порядок объявления: первое объявление выигрывает.

Что такое область видимости зависимостей (dependency scope)? Назовите значения dependency scope.¶

Существует 6 областей:

  • compile — это область по умолчанию, использутся, если ничего больше не определено. Compile зависимости доступны во всех classpath проекта.
  • provided — это очень похоже на compile, но указывает на то, что вы ожидаете от JDK или контейнера предоставить зависимость в ходе выполнения. Эта область доступна только на compilation и test classpath и не является транзитивной.
  • runtime — эта область указывает на то, что зависимость не обязательна для compilation, но для фаз выполнения.
  • test — эта область указывает, что зависимость не обязательна для нормального использования приложения.
  • system — эта область похожа на provided за исключением того, что вы предоставляете JAR. Артефакт всегда доступен и не смотрит в репозиторий.
  • import — эта область используется в зависимости типа pom в разделе. Это указывает на то, что определенный POM будет заменен зависимостями в этом POM разделе.

Какой минимальный набор информации нужен для сопоставления ссылки зависимостей на раздел dependencyManagement?¶

Минимальный набор информации такой

Как сослаться на свойство(property) определенное в файле pom.xml?¶

На все свойства в pom.xml, можно сослаться с помощью префиксов «project.» или
«pom.» Ниже приведёт пример некоторых часто используемых элементов.

Для чего нужен элемент в POM файле?¶

Элемент содержит информацию, необходимую для выполнения плагина.

Каким образом можно исключить зависимость в Maven?¶

Файл описания проекта предусматривает возможность исключить зависимость в случае обнаружения цикличности или отсутствия необходимости в определённой библиотеке. Зависимость может быть исключена используя элемент exclusion.

Что является полным именем артефакта?¶

Если вы не определяете никакой информации, где же ваш POM унаследует ее?¶

Все POM-и наследуются от родителя (несмотря на то явно определен он или нет). Это базовий POM известний как супер POM, он содержит значения, которие наследуются по умолчанию.

При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета?¶

Да, можете, но если в вашем локальном репозитории есть все необходимые для сборки артефакты.

Если при сборке проекта в тестах произошла ошибка. Как собрать проект без запуска тестов?¶

Для запуска сборки без выполнения тестов добавьте -Dmaven.test.skip=true к команде в строке запуска maven:

mvn install -Dmaven.test.skip=true

Как запустить только один тест?¶

Для запуска только одного теста добавьте -Dtest=[Имя класса] к команде в строке запуска maven. Например:

mvn install -Dtest=org.apache.maven.utils.ConverterTest

Как остановить распространение наследования плагинов для дочерних POM?¶

Установить в false.

Какие теги pom.xml вы знаете.¶

Вот некоторые из них:

  • project — описывает проект, это элемент верхнего уровня во всех файлах pom.xml.
  • groupId — по-сути, это имя пакета. Полностью отражается в структуре каталогов.
  • artifactId — название проекта. В структуре каталогов не отображается.
  • version — версия проекта.
  • packaging — определяет, какой тип файла будет собран. Варианты: pom, jar, war, ear.
  • dependencies — указываются зависимости.
  • build — информация о сборке проекта.
  • name — это уже необязательные описания проекта. В данном случае его название.
  • description — элемент представляет собой общее описание вашего проекта. Это часто используется в генерации документации Maven.
  • url — интернет-страница проекта.
  • repositories — репозитории для артефактов.
  • pluginRepositories — репозитории для плагинов Maven.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *