Введение

Программный инструмент для управления зависимостями сборки.

Maven — это инструмент автоматизации сборки, используемый преимущественно для Java-проектов. Maven также может применяться для сборки и управления проектами, написанными на C#, Ruby, Scala и других языках. Проект Maven поддерживается Apache Software Foundation, где ранее он входил в состав проекта Jakarta. Maven решает две ключевые задачи при создании программного обеспечения: определение способа сборки и управление зависимостями. В отличие от более ранних инструментов, таких как Apache Ant, он использует соглашения для процесса сборки, требуя указания лишь исключений из этих соглашений. Файл XML описывает создаваемый программный проект, его зависимости от внешних модулей и компонентов, порядок сборки, структуру каталогов и необходимые плагины. Maven поставляется с предопределенными задачами для выполнения определенных операций, таких как компиляция кода и его упаковка. Он динамически загружает Java-библиотеки и плагины Maven из одного или нескольких репозиториев, например, из Центрального репозитория Maven 2, и сохраняет их в локальном кэше. Этот локальный кэш загруженных артефактов может быть обновлен артефактами, созданными локальными проектами, а также общедоступные репозитории могут быть обновлены. Maven построен на архитектуре, основанной на плагинах, что позволяет использовать любое приложение, управляемое через стандартный ввод. Для Maven 2 поддерживается нативный плагин C/C++. Альтернативные технологии, такие как Gradle и sbt, как инструменты сборки, не используют XML, но сохраняют ключевые концепции, введенные Maven. Вместе с Apache Ivy был разработан специализированный менеджер зависимостей, который также поддерживает репозитории Maven. Apache Maven поддерживает воспроизводимые сборки.

Модель объекта проекта

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

Зависимые страны

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

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