Apache Maven - Википедия - Apache Maven

Apache Maven
Maven logo.svg
Разработчики)Фонд программного обеспечения Apache
изначальный выпуск13 июля 2004 г.; 16 лет назад (2004-07-13)
Стабильный выпуск
3.6.3 / 25 ноября 2019; Год назад (2019-11-25)[1]
РепозиторийРепозиторий Maven
Написано вЯва
ТипИнструмент сборки
ЛицензияЛицензия Apache 2.0
Интернет сайтmaven.apache.org

Maven это автоматизация сборки инструмент, используемый в основном для Ява проекты. Maven также можно использовать для создания и управления проектами, написанными на C #, Рубин, Scala, и другие языки. Проект Maven размещен на Фонд программного обеспечения Apache, где раньше он был частью Джакарта проект.

Maven рассматривает два аспекта создания программного обеспечения: как программное обеспечение построен, и его зависимости. В отличие от более ранних инструментов, таких как Apache Ant, он использует соглашения для процедуры сборки, и нужно записывать только исключения. An XML описывает создаваемый программный проект, его зависимости от других внешних модулей и компонентов, порядок сборки, каталоги и необходимые плагины. Он поставляется с заранее определенными целями для выполнения определенных четко определенных задач, таких как компиляция кода и его упаковка. Maven динамически скачивает Ява библиотеки и плагины Maven из одного или нескольких репозиториев, таких как Maven 2 Central Repository, и хранит их в локальном кэше.[2] Этот локальный кеш загруженных артефакты также могут быть обновлены артефактами, созданными локальными проектами. Публичные репозитории также могут обновляться.

Maven построен с использованием архитектуры на основе плагинов, которая позволяет ему использовать любое приложение, управляемое через стандартный ввод. Плагин для .NET framework существует и поддерживается,[3] и C /C ++ собственный плагин поддерживается для Maven 2.[4]

Альтернативные технологии, такие как Gradle и сбт поскольку инструменты сборки не полагаются на XML, но сохраните ключевые концепции Maven. С Apache Ivy также был разработан специальный диспетчер зависимостей, который также поддерживает репозитории Maven.[5]

Apache Maven поддерживает воспроизводимые сборки.[6][7]

История

Количество артефактов в центральном репозитории Maven стремительно растет.

Maven, созданный Джейсоном ван Зилом, начинался как подпроект Турбина Apache в 2002 году. В 2003 году он был проголосован и принят как высший уровень Фонд программного обеспечения Apache проект. В июле 2004 года выпуск Maven стал первой важной вехой - v1.0. Версия 2.0 для Maven 2 была объявлена ​​в октябре 2005 г. после шести месяцев бета-тестирования. Maven 3.0 был выпущен в октябре 2010 года и в основном обратно совместим с Maven 2.

Информация о Maven 3.0 начала поступать в 2008 году. После восьми альфа-релизов первая бета-версия Maven 3.0 была выпущена в апреле 2010 года. В Maven 3.0 была переработана основная инфраструктура Project Builder, в результате чего файловое представление POM было отделено от его входящей информации. представление объекта памяти. Это расширило возможности надстроек Maven 3.0 для использования файлов определения проекта, не основанных на XML. Предлагаемые языки включают Рубин (уже в частном прототипе Джейсона ван Зила), YAML, и Groovy.

Особое внимание было уделено обеспечению обратной совместимости Maven 3 с Maven 2. Для большинства проектов обновление до Maven 3 не потребует каких-либо корректировок их структуры проекта. В первой бета-версии Maven 3 была представлена ​​функция параллельной сборки, которая использует настраиваемое количество ядер на многоядерном компьютере и особенно подходит для крупных многомодульных проектов.

Синтаксис

Структура каталогов для проекта Java, автоматически созданная Maven

Проекты Maven настраиваются с использованием Объектная модель проекта, который хранится в pom.xml-файл. Пример файла выглядит так:

<project>  <!-- model version is always 4.0.0 for Maven 2.x POMs -->  <modelVersion>4.0.0</modelVersion>  <!-- project coordinates, i.e. a group of values which uniquely identify this project -->  <groupId>com.mycompany.app</groupId>  <artifactId>мое приложение</artifactId>  <version>1.0</version>  <!-- library dependencies -->  <dependencies>    <dependency>      <!-- coordinates of the required library -->      <groupId>Junit</groupId>      <artifactId>Junit</artifactId>      <version>3.8.1</version>      <!-- this dependency is only used for running and compiling tests -->      <scope>тест</scope>    </dependency>  </dependencies></project>

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

Структура каталогов нормального идиоматический В проекте Maven есть следующие записи каталога:

Имя каталогаЦель
проект домаСодержит pom.xml и все подкаталоги.
SRC / основной / JavaСодержит поставляемый исходный код Java для проекта.
SRC / основные / ресурсыСодержит доставляемые ресурсы для проекта, например файлы свойств.
SRC / тест / JavaСодержит тестовый исходный код Java (например, тестовые примеры JUnit или TestNG) для проекта.
SRC / тест / ресурсыСодержит ресурсы, необходимые для тестирования.

Команда mvn пакет скомпилирует все файлы Java, запустит любые тесты и упакует доставляемый код и ресурсы в цель / мое-приложение-1.0.jar (при условии, что artifactId - это мое приложение, а версия - 1.0.)

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

Дизайн

Объектная модель проекта

Объектная модель проекта (POM) предоставляет всю конфигурацию для одного проекта. Общая конфигурация охватывает имя проекта, его владельца и его зависимости от других проектов. Также можно настроить отдельные фазы процесса сборки, которые реализованы как плагины. Например, можно настроить подключаемый модуль компилятора для использования Java версии 1.5 для компиляции или указать упаковку проекта, даже если некоторые модульные тесты завершились неудачно.

Более крупные проекты следует разделить на несколько модулей или подпроектов, каждый со своим собственным POM. Затем можно написать корневой POM, через который можно скомпилировать все модули с помощью одной команды. POM также могут наследовать конфигурацию от других POM. Все POM наследуются от Super POM[8] по умолчанию. Super POM предоставляет конфигурацию по умолчанию, такую ​​как исходные каталоги по умолчанию, плагины по умолчанию и так далее.

Плагины

Большая часть функциональности Maven находится в плагины. Плагин предоставляет набор целей, которые можно выполнить с помощью команды mvn [название-плагина]: [название-цели]. Например, проект Java может быть скомпилирован с помощью компилятора-плагина compile-goal[9] бегом компилятор mvn: компилировать.

Существуют плагины Maven для сборки, тестирования, управления исходным кодом, запуска веб-сервера, создания Затмение файлы проекта и многое другое.[10] Плагины вводятся и настраиваются в разделе pom.xml файл. Некоторые базовые плагины включены в каждый проект по умолчанию, и у них есть разумные настройки по умолчанию.

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

  • компилятор mvn: компилировать
  • mvn surefire: тест
  • mvn jar: jar

Концепция жизненного цикла Maven решает эту проблему.

Плагины - это основной способ расширения Maven. Разработку подключаемого модуля Maven можно выполнить путем расширения класса org.apache.maven.plugin.AbstractMojo. Пример кода и объяснение плагина Maven для создания облачной виртуальной машины, на которой запущен сервер приложений, приведены в статье. Автоматизируйте разработку и управление облачными виртуальными машинами.[11]

Строить жизненные циклы

Жизненный цикл сборки - это список именованных фазы которые можно использовать, чтобы отдать приказ о выполнении цели. Один из стандартных жизненных циклов Maven - это жизненный цикл по умолчанию, который включает в себя следующие этапы в указанном порядке:[12]

  • подтверждать
  • генерировать источники
  • источники процесса
  • генерировать ресурсы
  • процесс-ресурсы
  • компилировать
  • источники-тесты-процессы
  • процесс-тест-ресурсы
  • тестовая компиляция
  • тест
  • упаковка
  • установить
  • развертывать

Цели, предоставляемые плагинами, могут быть связаны с разными фазами жизненного цикла. Например, по умолчанию цель «компилятор: компиляция» связана с фазой «компиляция», в то время как цель «surefire: test» связана с фазой «тест». Когда mvn test команда выполняется, Maven выполняет все цели, связанные с каждой из фаз, включая фазу «тестирования». В таком случае Maven выполняет цель «ресурсы: ресурсы», связанную с фазой «процесс-ресурсы», затем «компилятор: компиляция» и так далее, пока, наконец, не выполнит цель «уверенный: проверка».

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

Стандартные жизненные циклы позволяют пользователям, не знакомым с проектом, точно создавать, тестировать и устанавливать каждый проект Maven с помощью одной команды mvn install. По умолчанию Maven упаковывает файл POM в сгенерированные файлы JAR и WAR. Такие инструменты, как diet4j[13] может использовать эту информацию для рекурсивного разрешения и запуска модулей Maven во время выполнения, не требуя "uber" -jar, содержащего весь код проекта.

Зависимости

Центральной особенностью Maven является управление зависимостями. Механизм обработки зависимостей Maven организован вокруг системы координат, идентифицирующей отдельные артефакты, такие как программные библиотеки или модули. В приведенном выше примере POM координаты JUnit упоминаются как прямая зависимость проекта. Проект, который требует, скажем, Спящий режим библиотека просто должна объявить координаты проекта Hibernate в своем POM. Maven автоматически загрузит зависимость и зависимости, которые нужны самому Hibernate (так называемые транзитивные зависимости), и сохранит их в локальном репозитории пользователя. Maven 2 Центральный репозиторий[2] по умолчанию используется для поиска библиотек, но можно настроить репозитории, которые будут использоваться (например, частные репозитории компании) в POM.

Принципиальное различие между Maven и Ant заключается в том, что дизайн Maven рассматривает все проекты как имеющие определенную структуру и набор поддерживаемых рабочих потоков задач (например, получение ресурсов из системы контроля версий, компиляция проекта, модульное тестирование и т. Д.). Хотя большинство программных проектов фактически поддерживают эти операции и действительно имеют четко определенную структуру, Maven требует, чтобы эта структура и детали реализации операции были определены в файле POM. Таким образом, Maven полагается на соглашение о том, как определять проекты и о списке рабочих процессов, которые обычно поддерживаются во всех проектах.[14]

Существуют поисковые системы, такие как The Central Repository Search Engine.[15] который можно использовать для определения координат различных библиотек и фреймворков с открытым исходным кодом.

Проекты, разработанные на одной машине, могут зависеть друг от друга через локальный репозиторий. Локальный репозиторий - это простая структура папок, которая действует как кеш для загружаемых зависимостей, так и как централизованное место хранения для локально созданных артефактов. Команда Maven mvn install создает проект и размещает его двоичные файлы в локальном репозитории. Затем другие проекты могут использовать этот проект, указав его координаты в своих POM.

Совместимость

Дополнения к нескольким популярным интегрированные среды разработки нацеленные на язык программирования Java существуют для обеспечения интеграции Maven с механизмом сборки IDE и инструментами редактирования исходного кода, что позволяет Maven компилировать проекты из среды IDE, а также устанавливать путь к классам для завершения кода, выделения ошибок компилятора и т. д. Примеры популярных IDE, поддерживающие разработку с Maven, включают:

Эти надстройки также предоставляют возможность редактировать POM или использовать POM для определения полного набора зависимостей проекта непосредственно в среде IDE.

Некоторые встроенные функции IDE утрачиваются, когда IDE больше не выполняет компиляцию. Например, JDT Eclipse имеет возможность перекомпилировать один исходный файл Java после того, как он был отредактирован. Многие IDE работают с плоским набором проектов вместо иерархии папок, предпочитаемой Maven. Это усложняет использование СКМ системы в IDE при использовании Maven.[16][17][18]

Смотрите также

Рекомендации

  1. ^ «Релизы проектов Apache». projects.apache.org.
  2. ^ а б "Индекс / maven2 /". Архивировано из оригинал на 2018-09-17. Получено 2009-04-15.
  3. ^ "Плагин .NET Maven :: Плагин .NET Maven".
  4. ^ Лаугстол, Трюгве. "Плагин MojoHaus Native Maven".
  5. ^ "IBiblio Resolver | Apache Ivy ™".
  6. ^ «Воспроизводимые / проверяемые сборки - Apache Maven - Apache Software Foundation». cwiki.apache.org.
  7. ^ «Воспроизводимые сборки на Java - DZone Java». dzone.com.
  8. ^ Супер ПОМ
  9. ^ Пунзалан, Эдвин. «Плагин компилятора Apache Maven - Введение».
  10. ^ Марбез, Бретт Портер Джейсон ван Зил Деннис Лундберг Оливье Лами Бенсон Маргулис Карл-Хайнц. «Maven - Доступные плагины».
  11. ^ Эмис, Алекс; Zou P X; Ван И С. (29 октября 2011 г.). «Автоматизация разработки и управления облачными виртуальными машинами». IBM developerWorks. IBM.
  12. ^ Портер, Бретт. «Maven - Введение в жизненный цикл сборки».
  13. ^ "die4j - положите Java JAR на диету и загрузите модули maven по мере необходимости".
  14. ^ «Maven: полный справочник». Сонатип. Архивировано из оригинал 21 апреля 2013 г.. Получено 11 апреля 2013.
  15. ^ Центральная поисковая система репозитория,
  16. ^ "maven.apache.org/eclipse-plugin.html". Архивировано из оригинал 7 мая 2015 года.
  17. ^ «IntelliJ IDEA :: Возможности».
  18. ^ «MavenBestPractices - NetBeans Wiki».

дальнейшее чтение

внешняя ссылка