Apache Maven

редактировать
Apache Maven
Maven logo.svg
Разработчик (и) Apache Software Foundation
Первоначальный выпуск13 Июль 2004 г.; 16 лет назад (13.07.2004)
Стабильный выпуск 3.6.3 / 25 ноября 2019 г.; 10 месяцев назад (2019-11-25)
Репозиторий Maven Repository
Написано наJava
Тип Инструмент сборки
Лицензия Лицензия Apache 2.0
Веб-сайтmaven.apache.org

Maven - это инструмент автоматизации сборки, используемый в основном для проектов Java. Maven также можно использовать для создания и управления проектами, написанными на C#, Ruby, Scala и других языках. Проект Maven поддерживается Apache Software Foundation, где он ранее был частью Jakarta Project.

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

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

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

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

Содержание
  • 1 История
  • 2 Синтаксис
  • 3 Дизайн
    • 3.1 Объектная модель проекта
    • 3.2 Плагины
    • 3.3 Жизненные циклы сборки
    • 3.4 Зависимости
  • 4 Взаимодействие
  • 5 См. Также
  • 6 Ссылки
  • 7 Дополнительная литература
  • 8 Внешние ссылки
История
Количество артефактов в центральном репозитории Maven быстро растет

Maven, созданный Джейсоном ван Зилом, начинался как подпроект Apache Turbine в 2002 году. В 2003 году он был проголосован и принят как проект высшего уровня Apache Software Foundation. В июле 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. Предлагаемые языки включают Ruby (уже в частном прототипе Джейсона ван Зила), YAML и Groovy.

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

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

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

4.0.0com.mycompany.appmy-app1.0junitjunit3.8.1test

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

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

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

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

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

Дизайн

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

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

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

Плагины

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

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

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

  • mvn compiler: compile
  • mvn surefire: test
  • mvn jar: jar

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

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

Жизненные циклы сборки

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

  • validate
  • generate-sources
  • process-sources
  • generate- ресурсы
  • ресурсы-процессы
  • компиляция
  • источники-тестов-процессов
  • ресурсы-тесты-процесса
  • тест-компиляция
  • test
  • package
  • install
  • deploy

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

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

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

Зависимости

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

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

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

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

Взаимодействие

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

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

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

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Дополнительная литература
  • О'Брайен, Тим; и другие. «Мавен: Полный справочник». Sonatype.com. Сонатип. Проверено 15 марта 2013 г.
  • Maven: The Definitive Guide. Компания Sonatype. O'Reilly Media, Inc. 2009. стр. 470. ISBN 9780596551780. Проверено 17 апреля 2013 г. CS1 maint: others (ссылка )
  • Ван Зил, Джейсон (01.10.2008), Maven: Definitive Guide (первое издание), O'Reilly Media, стр. 468, ISBN 0-596-51733-5
  • «Запуск тестов JUnit из Maven2». JUnit in Action (2-е изд.). Manning Publications. 2011. pp. 152–168. ISBN 978-1-935182-02-3.
  • Настройка сборки Maven. Packt. 2013. pp. 1–250. ISBN 9781783987221.
  • Освоение Apache Maven 3. Packt. 2014. стр. 298. ISBN 9781783983865.
Внешние ссылки
Последняя правка сделана 2021-06-11 20:10:47
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте