Киби.ru

Живой сайт об актуальных проектах

User Tools

Site Tools


notes:java:maven

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
notes:java:maven [2018/12/14 16:55] – [Какая структура каталогов в Maven?] kibinotes:java:maven [2018/12/19 18:35] (current) kibi
Line 1: Line 1:
-====== Вопросы и ответы по Maven ======+====== Maven FAQ ======
  
 {{tag>maven java}} {{tag>maven java}}
 +
 +Основные ссылки по Maven:
 +
 +  * [[https://maven.apache.org/|Сайт проекта]]
 +  * [[https://mvnrepository.com/|Основной репозитарий Maven]]
  
 ===== Что такое сборка проекта, автоматизация сборки? ===== ===== Что такое сборка проекта, автоматизация сборки? =====
  
-Сборка (англ. assembly) - двоичный файл, содержащий исполняемый код программы или другой, подготовленный для использования информационный продукт.+<wrap em>Сборка (англ. assembly)</wrap> - двоичный файл, содержащий исполняемый код программы или другой, подготовленный для использования информационный продукт. Сборка проекта - это в том числе процесс создания необходимого двоичного файла
  
 <wrap em>Автоматизация сборки</wrap> - этап написания скриптов или автоматизация широкого спектра задач применительно к ПО, применяемому разработчиками в их повседневной деятельности, включая такие действия, как: <wrap em>Автоматизация сборки</wrap> - этап написания скриптов или автоматизация широкого спектра задач применительно к ПО, применяемому разработчиками в их повседневной деятельности, включая такие действия, как:
Line 30: Line 35:
   * Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты, которые собираются c помощью maven. При этом зачастую проект настраивать не нужно: он сразу готов к дальнейшей разработке.    * Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты, которые собираются c помощью maven. При этом зачастую проект настраивать не нужно: он сразу готов к дальнейшей разработке. 
   * Как следствие, если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же - меньше дублирования данных и, соответственно, ошибок.   * Как следствие, если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же - меньше дублирования данных и, соответственно, ошибок.
-  * Декларативное описание проекта. Указано **что** надо сделать, а не **как** надо сделать.+  * Декларативное описание проекта. Указано **что, где и когда** надо сделать, а не **как** надо сделать.
  
 ===== Какие недостатки Maven? ===== ===== Какие недостатки Maven? =====
Line 38: Line 43:
   * При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, если потребуется собирать даже не самое сложное приложение куда выше, чем у Ant.   * При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, если потребуется собирать даже не самое сложное приложение куда выше, чем у Ant.
   * Если нужно найти какой-то специальный плагин - это будет сделать непросто, плагинов много. И не факт, что найденный подойдёт на все 100% и будет работать без ошибок.   * Если нужно найти какой-то специальный плагин - это будет сделать непросто, плагинов много. И не факт, что найденный подойдёт на все 100% и будет работать без ошибок.
-  * Нужен доступ в интернет (или придётся разворачивать собственный репозиторий, что трудоёмко)+  * Нужен доступ в интернет (или придётся разворачивать собственный репозитарий, что трудоёмко)
   * Большие трудности, если проект не типовой.   * Большие трудности, если проект не типовой.
  
Line 72: Line 77:
 | ''src/main/java'' | Application/Library sources | исходный код приложения или библиотеки | | ''src/main/java'' | Application/Library sources | исходный код приложения или библиотеки |
 | ''src/main/resources'' | Application/Library resources | ресурсы приложения или библиотеки | | ''src/main/resources'' | Application/Library resources | ресурсы приложения или библиотеки |
-| ''src/main/filters'' | Resource filter files |  |+| ''src/main/filters'' | Resource filter files | файлы с параметрами фильтрации ресурсов |
 | ''src/main/webapp'' | Web application sources | исходный код веб-приложения | | ''src/main/webapp'' | Web application sources | исходный код веб-приложения |
 | ''src/test/java'' | Test sources | исходный код тестов (юнит-тестов) | | ''src/test/java'' | Test sources | исходный код тестов (юнит-тестов) |
 | ''src/test/resources'' | Test resources | ресурсы юнит тестов | | ''src/test/resources'' | Test resources | ресурсы юнит тестов |
-| ''src/test/filters'' | Test resource filter files |  |+| ''src/test/filters'' | Test resource filter files | файлы с параметрами фильтрации ресурсов для тестов |
 | ''src/it'' | Integration Tests (primarily for plugins) | интеграционные тесты (в основном для плагинов) | | ''src/it'' | Integration Tests (primarily for plugins) | интеграционные тесты (в основном для плагинов) |
 | ''src/assembly'' | Assembly descriptors | дескрипторы сборки | | ''src/assembly'' | Assembly descriptors | дескрипторы сборки |
Line 98: Line 103:
 <code xml><project xmlns="http://maven.apache.org/POM/4.0.0" <code xml><project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 +  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"></code> 
-                      http://maven.apache.org/xsd/maven-4.0.0.xsd"></code> +
  
 Внутри тега ''project'' содержится основная и обязательная информация о проекте. Внутри тега ''project'' содержится основная и обязательная информация о проекте.
Line 105: Line 109:
 ===== Какую информацию содержит pom.xml? ===== ===== Какую информацию содержит pom.xml? =====
  
-Среди информации которую содержит pom.xml мы можем выделить следующие: +Среди информации которую содержит pom.xmlмы можем выделить следующие блоки
-Зависимости проекта (project dependencies) +  Зависимости проекта (project dependencies) 
-Плагины (plugins) +  Плагины (plugins) 
-Задачи/цели (goals) +  Задачи/цели (goals) 
-Профиль создания (build profiles) +  Профиль создания (build profiles) 
-Версия проекта (project version) +  Версия проекта (project version) 
-Разработчики (developers) +  Разработчики (developers) 
-Список рассылки (mailing list)+  Список рассылки (mailing list)
  
-Что такое супер POM? +===== Что такое супер POM? =====
-Все POM - файлы являются наследниками родительского pom.xml. Этот POM-файл называется Super POM и содержит значения, унаследованные по умолчанию.+
  
-Какие элементы необходимы для минимального POM+Все POM-файлы являются наследниками родительского ''pom.xml''. Этот POM-файл называется <wrap em>Super POM</wrap> и содержит значения, унаследованные по умолчанию.
-Требуемые элементы для минимального POM ето корневий елемент, modelVersion, GroupID, artifactID  и версия. Минимальный POM файл:+
  
 +===== Какие элементы необходимы для минимального POM? =====
  
-Что такое зависимости в Maven? +Обязательные элементы для минимального POM это корневой элемент, ''modelVersion'', ''GroupID'', ''artifactID'' и версия. Минимальный POM файл: 
-Зависимость (dependency) - это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования.+<code xml> 
 +<project> 
 +  <modelVersion>4.0.0</modelVersion> 
 +  <groupId>org.codehaus.mojo</groupId> 
 +  <artifactId>my-project</artifactId> 
 +  <version>1.0</version> 
 +</project> 
 +</code>
  
-Что такое артефакт в Maven? +===== Что такое зависимости в Maven? =====
-Артефакт (artefact) - это, по сути, любая библиотека, хранящаяся в репозитории (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитории Maven. Каждый артефакт содержит group ID, artifact ID и версию.+
  
-Что такое плагин в Maven? +<wrap em>Зависимость (dependency)</wrap> - это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования.
-Плагин (plugin) - это зависимости Maven'а, расширяющие его функционал.+
  
-Что такое задача в Maven? +===== Что такое артефакт в Maven? =====
-Задача (goal) - это специальная задача, которая относится к сборке проекта и его управлению. Она может привязываться как к нескольким фазам, так и ни к одной. Задача, которая не привязана ни к одной фазе, может быть запущена вне фаз сборки с помощью прямого вызова.+
  
-Что такое архетип в Maven? +<wrap em>Артефакт (artefact)</wrap> - это, по сути, любая библиотека, хранящаяся в репозитарии (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитарии Maven. Каждый артефакт содержит ''group ID'', ''artifact ID'' и версию.
-Архетип (archetype) - это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов.+
  
-Что такое репозиторий в Maven? +===== Что такое плагин в Maven? =====
-Репозиторий (repository) - глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины.+
  
-Какие типы репозитория существуют в Maven? +<wrap em>Плагин (plugin)</wrap> - это зависимости Maven'а, расширяющие его функционал.
-В Maven существуют три типы репозитория: +
-Локальный (local) репозиторий - это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven. По умолчанию она расположена в <home директория>/.m2/repository - персональная для каждого пользователя. +
-Центральный (centralрепозиторий - это репозиториий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек. Который расположен в http://repo1.maven.org/maven2/ и доступен на чтение для всех пользователей в интернете. Если Maven не может найти зависимости в локальном репозиториито автоматически начинается поиск необходимых файлов в центральном репозитории +
-Удалённые (remote) репозиторий - иногда, Maven не может найти необходимые зависимости в центральном репозитории. В этом случае, процесс сборки прерывается и в консоль выводится сообщение об ошибке. Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм Удалённого репозитория, который является репозиторием, который определяется самим разработчиком. Там могут храниться все необходимые зависимости.+
  
-Какая команда установляет JAR-файл в локальное хранилище? +===== Что такое задача в Maven? ===== 
-mvn install+ 
 +<wrap em>Задача (goal)</wrap> - это специальная задача, которая относится к сборке проекта и его управлению. Она может привязываться как к нескольким фазам, так и ни к одной. Задача, которая не привязана ни к одной фазе, может быть запущена вне фаз сборки с помощью прямого вызова. 
 + 
 +===== Что такое архетип в Maven? ===== 
 + 
 +<wrap em>Архетип (archetype)</wrap> - это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов. 
 + 
 +===== Что такое репозитарий в Maven? ===== 
 + 
 +<wrap em>репозитарий (repository)</wrap> - глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины. 
 + 
 +===== Какие типы репозитария существуют в Maven? ===== 
 + 
 +В Maven существуют три типа репозитариев: 
 +  * **Локальный (local) репозитарий** - это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven. По умолчанию она расположена в <home директория>/.m2/repository - персональная для каждого пользователя. Фактически она является кэшем для центрального и удалённого репозитариев. 
 +  * **Центральный (central) репозитарий** - это репозитарий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек. Расположен по адресу http://repo1.maven.org/maven2/ и доступен на чтение для всех пользователей в интернете. Если Maven не может найти зависимости в локальном репозитарии, то автоматически начинается поиск необходимых файлов в центральном репозитарии. Для поиска по центральному репозитарию можно использовать сайт https://mvnrepository.com/ 
 +  * **Удалённый (remote) репозитарий**. Иногда Maven не может найти необходимые зависимости в центральном репозитарии, например при отсутствии интернета. В этом случае процесс сборки прерывается, и в консоль выводится сообщение об ошибке. Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм **удалённого репозитария**, который является репозитарием, определённым самим разработчиком. Там могут храниться все необходимые зависимости. 
 + 
 +===== Какая команда устанавливает JAR-файл в локальное хранилище (репозитарий)===== 
 + 
 +<code bash>mvn install</code> 
 + 
 +===== Какой порядок поиска зависимостей Maven? =====
  
-Какой порядок поиска зависимостей Maven? 
 Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке: Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке:
-Поиск зависимостей в локальном репозитории Если зависимости не обнаружены, происходит переход к шагу 2. +  - Поиск зависимостей в локальном репозитарииЕсли зависимости не обнаружены, происходит переход к шагу 2. 
-Поиск зависимостей в центральном репозитории. Если они не обнаружены и удалённый репозиторий определён, то происходит переход к шагу 4. +  Поиск зависимостей в центральном репозитарии. Если они не обнаружены и удалённый репозитарий определён, то происходит переход к шагу 4. 
-Если удалённый репозиторий не определён, то процесс сборки прекращается и выводится сообщение об ошибке. +  Если удалённый репозитарий не определён, то процесс сборки прекращается и выводится сообщение об ошибке. 
-Поиск зависимостей на удалённом репозитории, если они найдены, то происходит их загрузка в локальный репозиторий, если нет - выводится сообщение об ошибке.+  Поиск зависимостей на удалённом репозитарии, если они найдены, то происходит их загрузка в локальный репозитарий, если нет - выводится сообщение об ошибке.
  
-Какие два файла настройки есть в Maven, как они называются и где расположены? +===== Какие два файла настройки есть в Maven, как они называются и где расположены? =====
-В Maven, файлы настройки называются settings.xml, и они расположены в двох местах: +
-Каталог где установлен Maven: $M2_Home/conf/settings.xml +
-Домашняя директория пользователя: ${user.home}/.m2/settings.xml+
  
-Что такое жизненный цикл сборки в Maven? +В Maven, файлы настройки называются ''settings.xml'', и они расположены в двух местах: 
-Жизненный цикл сборки(Lifecycle) - это чётко опредлённая последовательность фаз во время выполнения которых должын быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла.+  * каталог где установлен Maven: ''$M2_Home/conf/settings.xml'' 
 +  * домашняя директория пользователя: ''${user.home}/.m2/settings.xml'' 
 + 
 +===== Что такое жизненный цикл сборки в Maven? ===== 
 + 
 +<wrap em>Жизненный цикл сборки (Lifecycle)</wrap> - это чётко определённая последовательность фазво время выполнения которых должны быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла. 
 + 
 +===== Назовите основные фазы жизненного цикла сборки Maven? =====
  
-Назовите основные фазы жизненного цикла сборки Maven? 
 Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз. Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз.
-В Maven есть следующие 3 стандартных жизненных цикла: 
-Очистка (clean) - очищает артефакты, созданные до сборки. 
-Сборка (default or build) - используется для создания приложения. 
-Создание сайта проекта (site) - генерирует документацию сайта для проекта. 
  
-Что делает команда mvn site? +В Maven есть следующие три стандартных жизненных цикла: 
-mvn site создает веб-сайт проекта.+  * **Очистка (clean)** - очищает артефакты, созданные до сборки. 
 +  * **Сборка (default or build)** - используется для создания приложения. 
 +  * **Создание сайта проекта (site)** - генерирует документацию сайта для проекта. 
 + 
 +===== Что делает команда mvn site? ===== 
 + 
 +<code bash>mvn site</code> создает веб-сайт проекта. 
 + 
 +===== Что делает команда mvn clean? =====
  
-Что делает команда mvn clean+<code bash>mvn clean</code> эта команда очищает целевую директорию от созданных в процессе сборки файлов.
-mvn clean - эта команда очищает целевую директорию от созданных в процессе сборки файлов.+
  
 ===== Из каких фаз состоит жизненный цикл сборки Clean? ===== ===== Из каких фаз состоит жизненный цикл сборки Clean? =====
Line 205: Line 233:
   * **post-integration-test** - выполняет действия, необходимые  после выполнения интеграционных тестов. Например, освобождение ресурсов.   * **post-integration-test** - выполняет действия, необходимые  после выполнения интеграционных тестов. Например, освобождение ресурсов.
   * **verify** - выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества.   * **verify** - выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества.
-  * **install** - переносит пакет в локальный репозиторий, откуда он будет доступен для использования как зависимость в других проектах. +  * **install** - переносит пакет в локальный репозитарий, откуда он будет доступен для использования как зависимость в других проектах. 
-  * **deploy** - копирует финальный пакет (архив) в удалённый репозиторий для, того, чтобы сделать его доступным другим разработчикам и проектам.+  * **deploy** - копирует финальный пакет (архив) в удалённый репозитарий для, того, чтобы сделать его доступным другим разработчикам и проектам.
  
 Здесь также необходимо уточнить два момента: Здесь также необходимо уточнить два момента:
Line 226: Line 254:
 <code bash>mvn clean dependency:copy-dependencies package</code>  <code bash>mvn clean dependency:copy-dependencies package</code> 
  
-Аргументы ''clean'' и ''package'' являются фазами сборки до тех пор, пока "''dependency:copy-dependencies''" является задачей. В этом случае, сначала будет выполнена фаза clean, после этого будет выполнена задача "''dependency:copy-dependencies''". После чего будет выполнена фаза ''package''.+Аргументы ''clean'' и ''package'' являются фазами сборки, в то время как "''dependency:copy-dependencies''" является задачей.  
 + 
 +В этом случае, сначала будет выполнена фаза clean, после этого будет выполнена задача "''dependency:copy-dependencies''". После чего будет выполнена фаза ''package''.
  
 ===== Что такое профиль сборки (Build Profile)? ===== ===== Что такое профиль сборки (Build Profile)? =====
Line 270: Line 300:
 ===== Когда Maven использует внешние зависимости? ===== ===== Когда Maven использует внешние зависимости? =====
  
-Если необходимые файлы не найдены ни в центральном, ни на удалённом репозитории, тогда для решения этой проблемы используются внешние зависимости.+Если необходимые файлы не найдены ни в центральном, ни на удалённом репозитарии, тогда для решения этой проблемы используются внешние зависимости.
  
 ===== Что нужно определить для внешней зависимости? ===== ===== Что нужно определить для внешней зависимости? =====
Line 287: Line 317:
 ===== Что такое SNAPSHOT в Maven? ===== ===== Что такое SNAPSHOT в Maven? =====
  
-<wrap em>SNAPSHOT</wrap> - это специальная версия, которая показывает текущую рабочую копию. При каждой сборке Maven проверяет наличие новой **snapshot** версии на удалённом репозитории.+<wrap em>SNAPSHOT</wrap> - это специальная версия, которая показывает текущую рабочую копию. При каждой сборке Maven проверяет наличие новой **snapshot** версии на удалённом репозитарии.
  
 ===== В чем разница между snapshot и версией? ===== ===== В чем разница между snapshot и версией? =====
  
-В случае с **обычной версией**, если Maven однажды загрузил версию ''data-service:1.0'', то он больше не будет пытаться загрузить новую версию 1.0 из репозитория. Для того, чтобы скачать обновлённый продукт ''data-service'' должен быть обновлён до версии 1.1.+В случае с **обычной версией**, если Maven однажды загрузил версию ''data-service:1.0'', то он больше не будет пытаться загрузить новую версию 1.0 из репозитария. Для того, чтобы скачать обновлённый продукт ''data-service'' должен быть обновлён до версии 1.1.
  
 В случае со **snapshot**, Maven автоматически будет подтягивать крайний snapshot (''data-service:1.0-SNAPSHOT'') каждый раз, когда будет выполнятся сборка проекта. В случае со **snapshot**, Maven автоматически будет подтягивать крайний snapshot (''data-service:1.0-SNAPSHOT'') каждый раз, когда будет выполнятся сборка проекта.
Line 310: Line 340:
   * **runtime** - эта область указывает на то, что зависимость не обязательна для ''compilation'', но для фаз выполнения.    * **runtime** - эта область указывает на то, что зависимость не обязательна для ''compilation'', но для фаз выполнения. 
   * **test** - эта область указывает, что зависимость не обязательна для нормального использования приложения.   * **test** - эта область указывает, что зависимость не обязательна для нормального использования приложения.
-  * **system** - эта область похожа на ''provided'' за исключением того, что вы предоставляете JAR. Артефакт всегда доступен и не смотрит в репозиторий.+  * **system** - эта область похожа на ''provided'' за исключением того, что вы предоставляете JAR. Артефакт всегда доступен и не смотрит в репозитарий.
   * **import** - эта область используется в зависимости типа ''pom'' в ''<dependencyManagement>'' разделе. Это указывает на то, что определенный POM будет заменен зависимостями в этом POM ''<dependencyManagement>'' разделе.   * **import** - эта область используется в зависимости типа ''pom'' в ''<dependencyManagement>'' разделе. Это указывает на то, что определенный POM будет заменен зависимостями в этом POM ''<dependencyManagement>'' разделе.
  
Line 344: Line 374:
 ===== При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета? ===== ===== При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета? =====
  
-Да, можете, если в вашем локальном репозитории есть все необходимые для сборки артефакты.+Да, можете, если в вашем локальном репозитарии есть все необходимые для сборки артефакты.
  
 ===== Если при сборке проекта в тестах произошла ошибка, как собрать проект без запуска тестов? ===== ===== Если при сборке проекта в тестах произошла ошибка, как собрать проект без запуска тестов? =====
Line 373: Line 403:
   * **description** - элемент представляет собой общее описание проекта. Это часто используется в генерации документации Maven   * **description** - элемент представляет собой общее описание проекта. Это часто используется в генерации документации Maven
   * **url** - интернет-страница проекта   * **url** - интернет-страница проекта
-  * **repositories** - репозитории для артефактов +  * **repositories** - репозитарии для артефактов 
-  * **pluginRepositories** - репозитории для плагинов Maven+  * **pluginRepositories** - репозитарии для плагинов Maven
  
 <note>Эта страница содержит переработанные и откорректированные материалы с  [[https://jsehelper.blogspot.com/2016/05/maven-1.html]]</note> <note>Эта страница содержит переработанные и откорректированные материалы с  [[https://jsehelper.blogspot.com/2016/05/maven-1.html]]</note>
notes/java/maven.1544795727.txt.gz · Last modified: 2018/12/14 16:55 by kibi

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki