Киби.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 17:08] – [Какую информацию содержит pom.xml?] 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 135: Line 140:
 ===== Что такое артефакт в Maven? ===== ===== Что такое артефакт в Maven? =====
  
-<wrap em>Артефакт (artefact)</wrap> - это, по сути, любая библиотека, хранящаяся в репозитории (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитории Maven. Каждый артефакт содержит ''group ID'', ''artifact ID'' и версию.+<wrap em>Артефакт (artefact)</wrap> - это, по сути, любая библиотека, хранящаяся в репозитарии (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитарии Maven. Каждый артефакт содержит ''group ID'', ''artifact ID'' и версию.
  
 ===== Что такое плагин в Maven? ===== ===== Что такое плагин в Maven? =====
Line 149: Line 154:
 <wrap em>Архетип (archetype)</wrap> - это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов. <wrap em>Архетип (archetype)</wrap> - это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов.
  
-===== Что такое репозиторий в Maven? =====+===== Что такое репозитарий в Maven? =====
  
-<wrap em>Репозиторий (repository)</wrap> - глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины.+<wrap em>репозитарий (repository)</wrap> - глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины.
  
-===== Какие типы репозитория существуют в Maven? =====+===== Какие типы репозитария существуют в Maven? =====
  
-В Maven существуют три типа репозиториев: +В Maven существуют три типа репозитариев: 
-  * **Локальный (local) репозиторий** - это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven. По умолчанию она расположена в <home директория>/.m2/repository - персональная для каждого пользователя. Фактически она является кэшем для центрального и удалённого репозиториев. +  * **Локальный (local) репозитарий** - это директория, которая хранится на нашем компьютере. Она создаётся в момент первого выполнения любой команды Maven. По умолчанию она расположена в <home директория>/.m2/repository - персональная для каждого пользователя. Фактически она является кэшем для центрального и удалённого репозитариев. 
-  * **Центральный (central) репозиторий** - это репозиторий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек. Который расположен в http://repo1.maven.org/maven2/ и доступен на чтение для всех пользователей в интернете. Если Maven не может найти зависимости в локальном репозитории, то автоматически начинается поиск необходимых файлов в центральном репозитории +  * **Центральный (central) репозитарий** - это репозитарий, который обеспечивается сообществом Maven. Он содержит огромное количество часто используемых библиотек. Расположен по адресу http://repo1.maven.org/maven2/ и доступен на чтение для всех пользователей в интернете. Если Maven не может найти зависимости в локальном репозитарии, то автоматически начинается поиск необходимых файлов в центральном репозитарии. Для поиска по центральному репозитарию можно использовать сайт https://mvnrepository.com/ 
-  * **Удалённый (remote) репозиторий**. Иногда Maven не может найти необходимые зависимости в центральном репозитории, например при отсутствии интернета. В этом случае процесс сборки прерывается, и в консоль выводится сообщение об ошибке. Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм **удалённого репозитория**, который является репозиторием, определённым самим разработчиком. Там могут храниться все необходимые зависимости.+  * **Удалённый (remote) репозитарий**. Иногда Maven не может найти необходимые зависимости в центральном репозитарии, например при отсутствии интернета. В этом случае процесс сборки прерывается, и в консоль выводится сообщение об ошибке. Для того, чтобы предотвратить подобную ситуацию, в Maven предусмотрен механизм **удалённого репозитария**, который является репозитарием, определённым самим разработчиком. Там могут храниться все необходимые зависимости.
  
-Какая команда установляет JAR-файл в локальное хранилище? +===== Какая команда устанавливает JAR-файл в локальное хранилище (репозитарий)===== 
-mvn install+ 
 +<code bash>mvn install</code> 
 + 
 +===== Какой порядок поиска зависимостей Maven? =====
  
-Какой порядок поиска зависимостей Maven? 
 Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке: Когда мы выполняем собрку проекта в Maven, автоматически начинается поиск необходимых зависимостей в следующем порядке:
-Поиск зависимостей в локальном репозитории Если зависимости не обнаружены, происходит переход к шагу 2. +  - Поиск зависимостей в локальном репозитарииЕсли зависимости не обнаружены, происходит переход к шагу 2. 
-Поиск зависимостей в центральном репозитории. Если они не обнаружены и удалённый репозиторий определён, то происходит переход к шагу 4. +  Поиск зависимостей в центральном репозитарии. Если они не обнаружены и удалённый репозитарий определён, то происходит переход к шагу 4. 
-Если удалённый репозиторий не определён, то процесс сборки прекращается и выводится сообщение об ошибке. +  Если удалённый репозитарий не определён, то процесс сборки прекращается и выводится сообщение об ошибке. 
-Поиск зависимостей на удалённом репозитории, если они найдены, то происходит их загрузка в локальный репозиторий, если нет - выводится сообщение об ошибке.+  Поиск зависимостей на удалённом репозитарии, если они найдены, то происходит их загрузка в локальный репозитарий, если нет - выводится сообщение об ошибке. 
 + 
 +===== Какие два файла настройки есть в Maven, как они называются и где расположены? ===== 
 + 
 +В Maven, файлы настройки называются ''settings.xml'', и они расположены в двух местах: 
 +  * каталог где установлен Maven: ''$M2_Home/conf/settings.xml'' 
 +  * домашняя директория пользователя: ''${user.home}/.m2/settings.xml'' 
 + 
 +===== Что такое жизненный цикл сборки в Maven? =====
  
-Какие два файла настройки есть в Maven, как они называются и где расположены? +<wrap em>Жизненный цикл сборки (Lifecycle)</wrap> - это чётко определённая последовательность фазво время выполнения которых должны быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла.
-В Maven, файлы настройки называются settings.xml, и они расположены в двох местах: +
-Каталог где установлен Maven: $M2_Home/conf/settings.xml +
-Домашняя директория пользователя: ${user.home}/.m2/settings.xml+
  
-Что такое жизненный цикл сборки в Maven? +===== Назовите основные фазы жизненного цикла сборки Maven? =====
-Жизненный цикл сборки(Lifecycle) - это чётко опредлённая последовательность фаз во время выполнения которых должын быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла.+
  
-Назовите основные фазы жизненного цикла сборки Maven? 
 Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз. Когда Maven начинает сборку проекта, он проходит через определённую последовательность фаз сборки, и выполняет определенные задачи, которые указаны в каждой из фаз.
-В Maven есть следующие 3 стандартных жизненных цикла: 
-Очистка (clean) - очищает артефакты, созданные до сборки. 
-Сборка (default or build) - используется для создания приложения. 
-Создание сайта проекта (site) - генерирует документацию сайта для проекта. 
  
-Что делает команда mvn site? +В Maven есть следующие три стандартных жизненных цикла: 
-mvn site - создает веб-сайт проекта.+  * **Очистка (clean)** - очищает артефакты, созданные до сборки. 
 +  * **Сборка (default or build)** используется для создания приложения. 
 +  * **Создание сайта проекта (site)** генерирует документацию сайта для проекта.
  
-Что делает команда mvn clean? +===== Что делает команда mvn site? ===== 
-mvn clean эта команда очищает целевую директорию от созданных в процессе сборки файлов.+ 
 +<code bash>mvn site</code> создает веб-сайт проекта. 
 + 
 +===== Что делает команда mvn clean? ===== 
 + 
 +<code bash>mvn clean</code> эта команда очищает целевую директорию от созданных в процессе сборки файлов.
  
 ===== Из каких фаз состоит жизненный цикл сборки Clean? ===== ===== Из каких фаз состоит жизненный цикл сборки Clean? =====
Line 220: Line 233:
   * **post-integration-test** - выполняет действия, необходимые  после выполнения интеграционных тестов. Например, освобождение ресурсов.   * **post-integration-test** - выполняет действия, необходимые  после выполнения интеграционных тестов. Например, освобождение ресурсов.
   * **verify** - выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества.   * **verify** - выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества.
-  * **install** - переносит пакет в локальный репозиторий, откуда он будет доступен для использования как зависимость в других проектах. +  * **install** - переносит пакет в локальный репозитарий, откуда он будет доступен для использования как зависимость в других проектах. 
-  * **deploy** - копирует финальный пакет (архив) в удалённый репозиторий для, того, чтобы сделать его доступным другим разработчикам и проектам.+  * **deploy** - копирует финальный пакет (архив) в удалённый репозитарий для, того, чтобы сделать его доступным другим разработчикам и проектам.
  
 Здесь также необходимо уточнить два момента: Здесь также необходимо уточнить два момента:
Line 241: 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 285: Line 300:
 ===== Когда Maven использует внешние зависимости? ===== ===== Когда Maven использует внешние зависимости? =====
  
-Если необходимые файлы не найдены ни в центральном, ни на удалённом репозитории, тогда для решения этой проблемы используются внешние зависимости.+Если необходимые файлы не найдены ни в центральном, ни на удалённом репозитарии, тогда для решения этой проблемы используются внешние зависимости.
  
 ===== Что нужно определить для внешней зависимости? ===== ===== Что нужно определить для внешней зависимости? =====
Line 302: 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 325: 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 359: Line 374:
 ===== При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета? ===== ===== При сборке проекта Maven постоянно проверяет наличие обновлений в интернете. Можете ли вы собрать проект без интернета? =====
  
-Да, можете, если в вашем локальном репозитории есть все необходимые для сборки артефакты.+Да, можете, если в вашем локальном репозитарии есть все необходимые для сборки артефакты.
  
 ===== Если при сборке проекта в тестах произошла ошибка, как собрать проект без запуска тестов? ===== ===== Если при сборке проекта в тестах произошла ошибка, как собрать проект без запуска тестов? =====
Line 388: 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.1544796496.txt.gz · Last modified: 2018/12/14 17:08 by kibi

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki