Что такое maven для чего он нужен

Что такое Maven, и где он обитает?

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

Мавен – это фреймворк автоматической сборки проектов с широким функционалом – достаточно широким, чтобы неподготовленный разработчик, зашедший в эти дебри, заработал головную боль, сломал себе проект и ногу, а то и обе. Сегодня мы попробуем буквально за 10 минут освоить главные фишки мавен : управление зависимостями, в том числе транзитивными, и автоматическую сборку. Если вдруг вы не знакомы с понятием транзитивных зависимостей, это цепочка A ← B ← C, где A зависит от В, а В от С. Maven позволяет не запариваться по этому поводу, и если вам нужен именно А, указывать только его, об остальном позаботится за вас.

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

Установка Maven.

Первый проект Maven

Все современные IDE позволяют создать проект maven буквально двумя кликами, но мы не станем срезать путь. Для создания простейшей директории запустите в консоли команду:

Чтобы задать шаблон, просто добавьте в команду

На выходе получаем такую структуру:

В корне видим сгенерированный файл pom.xml, открываем его.

Важные тонкости

Напоследок хочу обратить внимание на несколько пунктов. По умолчанию Maven работает с java 1.6, чтобы это поправить, нужно внутри тега project добавить следующий код, заменив <Ваша версия java>на соответствующий номер.

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

Фреймврок автоматически пройдет цепочку из 6 этапов, и теперь остается только запустить:

Наслаждаемся результатом трудов! =)

Этого должно быть достаточно для базового понимания Maven. Если вы загорелись идеей освоить этот инструмент и использовать весь его функционал, стоит начать с детального изучения super POM, шаблонов и плагинов. Удачи вам в освоении новых рубежей 😉

Источник

Введение в Maven от Balaji Varnasi и Sudha Belida (перевод)

От переводчика: Несколько лет назад я поставил себе целью быстро, но достаточно плотно познакомиться с таким повсеместно используемым фреймворком, как Apache Maven. Практически моментально мне удалось найти соответствующую литературу, но я был слегка удивлен тем фактом, что все комплексные материалы были исключительно на английском языке, на русском же была масса разрозненных статей, но полноценной книжки, которую можно было прочитать от корки до корки, мне обнаружить не удалось. Как результат, для прочтения я выбрал небольшую книжку «Introducing Maven», написанную Balaji Varnasi и Sudha Belida и выпущенную издательством Apress в 2014 году. По мере прорешивания всех задач у меня постепенно родился перевод этого издания, который хоть и пару лет пролежал у меня в столе, но возможно всё еще будет полезен сообществу.

Здесь я привожу перевод только одной из глав этой книги, а целиком её можно скачать вот по этим ссылкам на английском, или на русском языке (PDF).

Глава 6: Архетипы Maven

До этого момента вы создавали проект Maven вручную, создавая папки и файлы pom.xml с нуля. Это может быть утомительным, особенно если вам часто приходится создавать проекты. Для решения этой проблемы Maven предоставляет архетипы. Архетипы Maven — это заготовки проектов, которые позволяют пользователям легко создавать новые проекты.

Архетипы Maven также предоставляют удобную базу для обмена опытом и обеспечивают постоянство стандартной структуры директорий Maven. Например, предприятие может создать архетип с корпоративной каскадной таблицей стилей (CSS), утвержденными библиотеками JavaScript и повторно используемыми компонентами. Разработчики, используя эти архетипы для создания проектов, будут автоматически следовать стандартам компании.

Встроенные архетипы

Maven прямо «из коробки» предоставляет разработчикам сотни архетипов. Кроме того, существует множество проектов с открытым исходным кодом предоставляющих дополнительные архетипы, которые можно скачать и использовать. Maven также предоставляет архетипы плагинов с целями для создания архетипов и генерации проектов из архетипов.

У плагина архетипов существует цель generate, позволяющая просматривать и выбирать необходимый архетип. Листинг 6-1 отображает результаты запуска цели generate из командной строки. Как видите, на выбор предоставлен 491 архетип (на 2018 год их уже было более 2 тысяч – прим.перев.). Использование нескольких из них рассматривается в этой главе.

Листинг 6-1. Вызов цели generate плагина архетипов Maven

Создание Веб-проекта

Maven предоставляет архетип maven-archetype-webapp, позволяющий сгенерировать веб-приложение. Давайте создадим такое приложение путем вызова следующей команды в папке C:\apress\gswm-book\chapter6:

Эта команда выполняется в интерактивном режиме. На поступающие вопросы введите следующую информацию:

Сгенерированная структура папок должна походить на ту, что изображена на Рисунке 6-1:

Рисунок 6-1. Структура веб-проекта Maven

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

Файл pom.xml минимален и содержит единственную зависимость — JUnit. Maven может упростить запуск вашего веб-приложения, используя встроенные веб-серверы, такие как Tomcat или Jetty. Листинг 6-2 отображает модифицированный файл pom.xml с добавленным плагином Tomcat.

Листинг 6-2. Модифицированный файл pom.xml с внедренным плагином Tomcat

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

Вы увидите развернутый проект и вывод, похожий на изображенный на Листинге 6-3.

Листинг 6-3. Вывод команды Tomcat run

Теперь запустите браузер и перейдите по адресу localhost:8080/gswm-web/. Вы должны увидеть веб-страницу, подобную изображенной на Рисунке 6-2.

Рисунок 6-2. Веб-проект, запущенный в браузере

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

Мультимодульный проект

Проекты Java Enterpise Edition (JEE) часто разделяются на несколько модулей для облегчения разработки и поддержки. Каждый из этих модулей производит такие артефакты, как Enterprise JavaBeans (EJBs), веб-сервисы, веб-проекты и клиентские JAR. Maven поддерживает разработку таких больших JEE-проектов, позволяя размещать несколько Maven-проектов внутри другого Maven-проекта. Структура такого мультимодульного проекта отображена на Рисунке 6-3. Родительский проект обладает файлом pom.xml и несколькими Maven-проектами внутри.

Рисунок 6-3. Структура мультимодульного проекта

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

До конца этой главы мы объясним, как построить мультимодульный проект для задачи, в которой вам нужно разделить большой проект на веб-приложение (WAR-артефакт), предоставляющее пользовательский интерфейс, сервисный проект (JAR-артефакт), содержащий код сервисного слоя, и проект постоянства (Persistence), содержащий код уровня репозитория. На Рисунке 6-4 отображено визуальное представление такого сценария.

Рисунок 6-4. Мультимодульный проект Maven

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

Давайте начнём процесс с создания родительского проекта. Чтобы это сделать выполните следующую команду в командной строке в папке C:\apress\gswm-book\chapter6:

Архетип pom-root создает папку gswm-parent и в ней — файл pom.xml.

Как следует из Листинга 6-4, созданный файл pom.xml имеет минимальное содержимое. Заметьте, что в теге packaging родительского проекта указан тип pom.

Листинг 6-4. Родительский файл pom.xml

Теперь создайте веб-проект запуском следующей команды в папке C:\apress\gswm-book\chapter6\gswm-parent:

В процессе генерации этого веб-проекта вы предоставили Maven такие координаты, как groupId, version и др. в виде параметров, переданные в генерирующую цель, которая и создала проект gswm-web.

Следующим шагом будет создание сервисного проекта. Находясь в папке C:\apress\gswm-book\chapter6\gswm-parent выполните следующую команду:

Обратите внимание, что вы не указывали параметр package, т.к. maven-archetype-quickstart создает JAR-проект по умолчанию. Также обратите внимание на использование параметра interactiveMode. Он просто указывает Maven выполнять команду, не запрашивая у пользователя никакой информации.

Аналогично предыдущему шагу, создайте следующий Java-проект gswm-repository путем выполнения в папке C:\apress\gswm-book\chapter6\gswm-parent следующей команды:

Теперь, когда у вас сгенерированы все проекты, взгляните на файл pom.xml в папке gswm-parent. Листинг 6-5 отображает его содержимое.

Listing 6-5. Родительской файл pom.xml с модулями

Элемент modules позволяет объявлять дочерние модули в мультимодульном проекте. По мере генерации каждого модуля Maven регистрирует их в качестве дочерних. Кроме того, он модифицирует файлы pom.xml самих модулей, добавляя в них информацию о родительском pom.xml. Листинг 6-6 отображает файл pom.xml проекта gswm-web, в котором указан родительский pom-элемент.

Listing 6-6. Файл pom.xml веб-модуля

Теперь, когда вся инфраструктура установлена, можно собрать следующий проект. Просто запустите команду mvn package находясь в папке gswm-project, как отображено в Листинге 6-7.

Listing 6-7. Команда Maven package, запущенная в директории родительского проекта

Создание архетипов

Maven предоставляет несколько способов создать новый архетип. Здесь для этого мы будем использовать уже существующий проект.

Начнем с создания прототипного проекта, который будет использоваться в качестве основы для генерации архетипа. Этот проект будет Servlet 3.0-совместимым и содержит Status Servlet, возвращающий код 200 HTTP-состояния («OK» – успешный запрос). Вместо создания веб-проекта «с нуля» скопируем ранее сгенерированный проект gswm-web и создадим gswm-web-prototype в папке C:\apress\gswm-book\chapter6. Внесите следующие изменения в только что скопированный проект:

1. Удалите все прочие ресурсы, такие как файлы, специфичные для Integrated Development Environment (IDE) (.project, .classpath и т.д.), которые вы не хотите включать в архетип.

2. Замените содержимое файла web.xml из папки webapp/WEB-INF. Это настроит веб-приложение на использование Servlet 3.0:

3. Добавьте зависимость Servlet 3.0 в файл pom.xml. Обновленное содержимое pom.xml отображено в Листинге 6-8.

Листинг 6-8. Файл pom.xml с Servlet Dependency

4. Т.к. мы будем вести разработку веб-проекта на Java, то создайте папку с именем java в директории src/main. Аналогично создайте папки test/java и test/resources в директории src.

5. Создайте файл AppStatusServlet.java, принадлежащий пакету com.apress.gswmbook.web.servlet в директории src/main/java. Пакет com.apress.gswmbook.web.servlet преобразуется в структуру папок com\apress\gswmbook\web\servlet. Исходный код файла AppStatusServelet.java отображен в Листинге 6-9.

Listing 6-9. Исходный код Java-класса AppStatusServlet

Прототипный проект по структуре будет поход на изображенный на Рис.6-5.

Рис. 6-5. Сгенерированный прототипный проект

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

Используя командную строку, перейдите в папку gswm-web-prototype проекта из выполните следующую команду:

По завершению команды вы увидите сообщение Archetype created in target/generated-sources/archetype. Сгенерированный архетип находится в папке gswm-web-prototype/target/generated-sources/archetype.

Следующим шагом является перенос только что сгенерированного артефакта в отдельную папку gswm-web-archetype для его настройки перед публикацией. Для этого выполните следующие шаги:

1. Создайте папку gswm-web-archetype в директории C:\apress\gswm-book\chapter6.

2. Скопируйте поддиректории и файлы из папки C:\apress\gswm-book\chapter6\gswm-web-prototype\target\generated-sources\archetype в папку gswm-web-archetype.

3. Удалите поддиректорию target из папки C:\apress\gswm-book\chapter6\gswm-web-archetype.

Структура папок для gswm-web-archetype должна быть похожа на отображенную на Рисунке 6-6.

Рис. 6-6. Структура проекта веб-архетипа

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

Когда проект создается из архетипа, Maven запрашивает у пользователя имя пакета. Maven создает структуру папок, соответствующую пакету, находящемуся в директории src/main/java созданного проекта. Затем Maven перемещает в этот пакет все содержимое из папки archetype-resources/src/main/java архетипа. Т.к. вы хотите, чтобы AppStatusServlet находился во вложенном пакете web.servlet, то создайте папку web/servlet и переместите AppStatusServlet туда. Новое расположение AppStatusServlet.java отображено на Рисунке 6-7.

Рис.6-7. AppStatusServlet в пакете web.servlet

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

Использование архетипов

Как только архетип был инсталлирован, то простейшим путем создать из него проект – это, находясь в папке C:\apress\gswm-book\chapter6, выполнить следующую команду:

В ответ на запросы Maven введите значения, указанные в Листинге 6-10, и вы увидите созданный проект.

Listing 6-10. Создание нового проекта с использованием архетипа

Т.к. файл pom.xml для test-project уже содержит плагин Tomcat, то для запуска проекта вызовите команду mvn tomcat7:run, находясь в папке C:\apress\gswmbook\chapter6\test-project. Откройте браузер и перейдите по адресу localhost:8080/test-project/status. Вы увидите надпись OK, как отображено на Рисунке 6-8.

Рис.6-8. Страница, выводимая сгенерированным проектом

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

Итоги

Архетипы Maven являются заготовками проектов, позволяющими быстро запускать новые проекты. В данной главе для генерации сложных Maven-проектов, таких как веб-проекты или мультимодульные проекты, использовались встроенные архетипы. Также вы познакомились с созданием и использованием пользовательских архетипов.

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

Источник

Краткое знакомство с Maven

Что такое maven для чего он нужен. Смотреть фото Что такое maven для чего он нужен. Смотреть картинку Что такое maven для чего он нужен. Картинка про Что такое maven для чего он нужен. Фото Что такое maven для чего он нужен

Maven — инструмент для автоматизации сборки проектов. С ним работают в основном Java-разработчики, хотя есть плагины для интеграции с C/C++, Ruby, Scala, PHP и другими языками. В статье будут рассмотрены особенности и область применения Maven, описан процесс установки и начала работы, а также разобрана структура файла описания проекта.

Назначение и особенности

Собрать на Java проект уровня «Hello, world!» можно и с помощью командной строки. Но чем сложнее разрабатываемое ПО и чем больше оно использует сторонних библиотек и ресурсов, тем сложнее будет команда для сборки. Maven разработан для облегчения этой работы.

Одна из главных особенностей фреймворка — декларативное описание проекта. Это значит, что разработчику не нужно уделять внимание каждому аспекту сборки — все необходимые параметры настроены по умолчанию. Изменения нужно вносить лишь в том объёме, в котором программист хочет отклониться от стандартных настроек.

Ещё одно достоинство проекта — гибкое управление зависимостями. Maven умеет подгружать в свой локальный репозиторий сторонние библиотеки, выбирать необходимую версию пакета, обрабатывать транзитивные зависимости.

Разработчики также подчёркивают независимость фреймворка от ОС. При работе из командной строки параметры зависят от платформы, но Maven позволяет не обращать внимания на этот аспект.

При необходимости систему сборки можно настроить под собственные нужды, используя готовые плагины и архетипы. А если ничего подходящего не нашлось — можно написать свои.

В этой статье мы будем работать с Maven с помощью командной строки, однако этот фреймворк также интегрирован в Eclipse, IntelliJ IDEA, NetBeans и другие IDE.

Установка, настройка и создание стандартного проекта

Скачать Maven можно с официальной страницы проекта. Там же вас познакомят с минимальными требованиями — на машине должен быть установлен JDK, а также потребуется свободное место на диске, около 500 мегабайт. Это место нужно не для самой установки, оно будет использовано для создания локального репозитория.

На странице скачивания вы найдёте несколько разных архивов, для первого раза лучше использовать готовые бинарники. Исходники потребуются, если захочется всё сломать покопаться в Maven.

В ОС на основе Unix переменную среды можно добавить консольной командной:

Создаём папку для нового проекта и переходим в неё. Далее создаём новый проект. Для этого в консоли выполните команду:

Выглядит довольно сложно, поэтому разберём её по порядку.

Выполнив команду, Maven сгенерирует следующую структуру проекта:

Исходники нашего проекта будут лежать в папке src/main/java (и сейчас там уже есть автоматически сгенерированный файл), но нам сейчас интереснее файл pom.xml в корневом каталоге. Это и есть тот самый файл описания проекта, на основе которого осуществляются все операции Maven. Он написан на языке POM, входящим в семейство XML:

Разберёмся, что всё это значит.

Что значат теги в pom.xml

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

Поздравляем! Вы собрали проект с помощью Maven. Для более детального изучения инструмента советуем обратить внимание на эти книги и материалы.

Источник

Maven — зачем?

Это общая модель проектов. В ней описываются такие общие характеристики как имя, версия, авторы и их контактная информация, VCS проекта и вообще связанные с ним сетевые ресурсы, тип проекта (например библиотека или web-модуль, в оригинальной терминологии называется packaging, хотя влияет не только на тип получаемого артефакта), связи с другими проектами, используемые при сборке плагины и описания способа их задействования. Мне кажутся особенно важными два компонента этой модели.

Связи с другими модулями

POM допускает три типа связей с другими модулями: зависимость, включение и наследование.

Зависимость, эта связь говорит, что для некоторых фаз жизненного цикла нашего модуля, требуются некоторые артефакты модулей-зависимостей (абстрактно получилось — аж самому страшно). Что конкретно и на какой фазе жизненного цикла требуется определяется так называемой областью действия зависимости. Maven понимает несколько предопределённых областей действия и позволяет добавлять свои. В качестве примера ограничусь одной областью действия: compile — она говорит, что бинарные сборки зависимости требуются на этапе компиляции, выполнения тестов и во время выполнения.

Включение — говорит, что связанный модуль является неотъемлемой частью нашего модуля. Для прохождения нашим модулем некоторой фазы жизненного цикла, входящий в него также должен пройти эту фазу. Классический пример enterprise-модуль, включающий в себя web-модуль, пакет с EJB и общую библиотеку. Очевидно, что его сборка требует сборки каждого из включаемых модулей.

Наследование. Такая связь подразумевает перенос на наследника части модели предка. Правила переноса несколько запутаны, но в основном действует принцип — значение параметра модели предка становится умолчанием для модели потомка. Пример из моей практики: был создан модуль, устанавливающий версию JDK для компиляции проектов, внутренние репозитарии для результатов, набор правил для поверки соответствия исходников стандарту кодирования, он должен был использоваться (а кое-где и действительно использовался 😉 ) как родитель для всех разрабатываемых в рамках проекта модулей.

Описание используемых при сборке плагинов

Описание состоит из имени задействуемого плагина, некоторых его настроек(они определяются плагинами индивидуально), и собственно выполняемых им целей на каждой из фаз жизненного цикла(подробное описание идей, стоящих за этими терминами см. ниже).

Этот элемент несколько чужд общей идеи POM — он несёт не декларативное описание модуля, а инструкции по его сборке конкретным инструментом.

Итоги

Репозитории артефактов

Репозитории артефактов являются выделенными хранилищами результатов сборки, устроенными так, чтобы упростить поиск нужного артефакта (по имени, версии, типу артефакта). Они позволяют группе разработчиков пользоваться результатами работы друг друга без необходимости иметь копии исходных кодов их модулей и выполнять сборку дерева зависимостей с 0. Maven-совместимые репозитарии стали стандартом де факто публикации результатов различных открытых проектов.

Нужно заметить, что pom-файлы, содержащие модель проекта, также являются артефактами и могут хранится в репозитариях вместе со всеми (на самом деле по крайней мере урезанные их версии, содержащие только идентификацию модуля и зависимости, хранятся всегда). Таким образом репозитарий является в том числе источником информации (как миннимум достаточной для дистрибуции) о хранимых в нём модулях.

Утилита управления жизненным циклом

Название получилось достаточно пафосное, однако оно вполне соответствует высокой миссии и сложности предмета.

Прежде чем погрузиться в её функции, необходимо немного познакомится с теорией организации жизненного цикла модуля в Maven. Жизненным циклом называется вся совокупность операций над модулем от инициализации сборки до развёртывания. В процессе прохождения жизненного цикла выполняются определённые операции над модулем, формируются некоторые артефакты. Жизненный цикл разделён на фазы. Каждая фаза подразумевает перевод модуля в новое состояние в результате её прохождения и появление новых артефактов. Каждая предыдущая фаза подготовливает основу для последующей. Список фаз является по сути частью POM, но глобальной, общей для всех модулей. Поный список приводить бессмысленно, но для примера приведу несколько фаз (достаточно интуитивно названных, на мой взгляд 🙂 ) в порядке их следования: compile,… test,… deploy.

В рамках каждой фазы выполняется некоторый набор целей в зависимости от модели конкретного модуля. Цель является конкретной операцией над исходными кодами и/или артефактами.

Также можно попросить выполнить отдельную задачу конкретного плагина. Например есть плагин для генерации Eclipse-проектов, задача «сгенерировать проект» которого по умолчанию не привязывается ни к одной фазе, а вызывается заинтересованными лицами вручную.

Ещё одной крайне интересной функцией mvn является создание заготовки проекта на основе архетипа. Архетип — обобщённый шаблон проекта, традиционно концентрирующийся на его структуре и используемых плагинах. Например есть стандартные архетипы java-библиотеки, web-модуля, и нестандартные, например grails приложение. Важно понимать отличие архетипа от типа проекта. Архетип — только шаблон начальной структуры и отдельных частей проекта, после создания проекта никакой информации о его архетипе не остаётся. Тип проекта — наоборот, часть модели, которая используется на протяжении всего жизненного цикла.

Что получается в сумме

Итак, мы выделили три столпа Maven. Что-же они дают нам вместе?

Заключение

Что-то я местами отклонился от центрального вопроса и вплотную занялся вопросом «как», ну да ладно…

Из всей информации, приведённой выше, можно сделать простой, но почему-то весьма редкий вывод. Maven — не утилита для сборки Java-приложений. Maven — фреймворк для автоматизации большого спектра задач при поддержке проекта. Он никак не связан с языком и платформой, более того он совершенно не обязан что-либо собирать. Вы с помощью описания моделей или написания плагинов превращаете его в тот или иной инструмент. Да, принятая в нём по модель по умолчанию — сборка Java-модулей, но это лишь умолчания…

Надеюсь, что после прочтения топика каждый может уверенно ответить на вопросы, приведённые в начале 😉

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *