Что такое maven java
Перейти к содержимому

Что такое maven java

  • автор:

Maven — зачем?

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

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

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

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

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

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

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

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

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

Итоги
  1. POM — эта общая, унифицированая модель описания программных модулей.
  2. Она поддерживает хранение не только аттрибутов отдельных модулей но и высокоуровневых связей между ними.
  3. Также она несёт информацию об инструментах, необходимых для поддержки жизненного цикла модуля.
Репозитории артефактов

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

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

  1. Структурированное хранение артефактов, их каталогизация.
  2. Повторное использование артефактов.
Утилита управления жизненным циклом

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

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

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

  1. Во-первых из совсем маленького ядра, в котором описаны (захардкожены, как говорит простой народ) базовые принципы устройства проектов, цели по умолчанию для фаз стандартных типов проектов, рабочая среда для плагинов (интерфейсы доступа к моделям, репозитариям, ФС, настройкам и т.п.).
  2. Во-вторых из плагинов. Они собственно содержат код, выполняющий цели. Практически вся внешняя функциональность mvn реализуется ими. Именно они генерируют, компилируют, тестируют, пакуют и т.д. и т.п.

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

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

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

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

  • Концентрирование информации о модуле в одном месте и в одном формате. Не всё тут гладко, но многие IDE могут импортировать проекты из POM, большинство серверов автокомпиляции (continuous integration, как говорят адепты XP) также могут использовать их добавлении проекта.
  • Единая система идентификации модулей. Очень просто и очень важно. У нас нет теперь обозначений типа багфикс-ветка нашего-супер-проекта, собранная в 23 часа в прошлую субботу.
  • Один инструмент. Хотя это, прямо скажем, не уникальная фича Maven. Не удержусь и повторю прописную истину: проект должен собираться стандартными и переносимыми средствами. Сборка любимой IDE Первого Разработчика Проекта — путь в ад.
  • Автоматическое управление зависимостями. Связывание исходного кода проекта с бинарными сборками чего-то, очень невесёлая практика. Особо надо отметить трудности с поддержкой репозитариев исходников (сколько магнитных лент занимает бэкап вашего svn?)) ). Изобретения велосипеда в виде своих репозитариев или скриптов подтаскивающих исходнки зависимостей тоже не лучшее решение в эпоху, когда космические корабли бороздят просторы вселенной.
  • Повторное использование решений, связанных с устройством и процедурой сборки проектов. Благодаря наследованию и включению проектов мы можем многократно использовать однажды разработанные модели проектов, настройки, связанные с инфраструктурой и инструментарием принятыми в нашей компании. Использование архетипов позволяет автоматизировать этап создания новых проектов, съэкономить время на подготовке структуры проекта и минимизировать ошибки в использовании внешних моделей.
  • Готовое средство для управления результатами работы и простота их последующего использования. Настраиваем инфраструктуру подобающим образом и каждый билд оседает в нужном месте и доступен для последующего использования. Нужно проверить работоспособность разных компоновок версий/веток модулей большого проекта? Просто правим зависимости в POM.
Заключение

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

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

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

P.S. Ещё я с интересом узнаю о вашем опыте нестандартного применения Maven. Есть идея в будующем создать пост с примерами интересных и необычных use case’ов для него.

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

Фрейворк Maven предназначен для автоматизации сборки проектов. Эта статья о том, как начать с ним работу и как забобраться в файле описания проекта pom.xml.

Обложка поста Краткое знакомство с 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.

Архив можно распаковать в любое удобное место. После этого нужно добавить путь к папке bin из распакованного архива в переменную среды PATH . В Windows нужно зайти в настройки параметров системы (вызывается комбинацией клавиш Win+Pause или щелчком правой кнопкой мыши по ярлыку «Мой / Этот компьютер» -> «Свойства»), и выбрать пункт «Дополнительные параметры системы». В правом нижнем углу нажмите кнопку «Переменные среды». Выберите переменную PATH , нажмите «Изменить», в открывшемся окне — «Создать» и добавьте путь. Обратите внимание, путь должен вести именно к папке bin .

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

export PATH=/opt/apache-maven-3.6.0/bin:$PATH 

Проверить, всё ли сделано правильно, можно с помощью консольной команды mvn -v . Вы должны увидеть что-то подобное:

Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T21:41:47+03:00) Maven home: C:\apache-maven-3.6.0\bin\.. Java version: 10.0.1, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-10.0.1 Default locale: ru_RU, platform encoding: Cp1251 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows" 

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

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false 

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

archetype:generate это так называемая цель. Она указывает Maven, что нужно создать проект из архетипа. Дальше с помощью -D мы указываем определённые параметры генерации.

  • groupId=com.mycompany.app указывает на разработчика ПО, там вы можете указать доменное имя своей компании.
  • artifactId=my-app — название проекта. Maven оперирует так называемыми артефактами. Это приложения, плагины, архетипы и другие проекты. И ваша разработка также будет считаться артефактом.
  • archetypeArtifactId=maven-archetype-quickstart указывает, какой архетип использовать в качестве шаблона для создания приложения. Как видите, это тоже артефакт. Указанный архетип создаст простой проект, сгенерирует структуру каталогов и даже заботливо положит в папку исходников программу «Hello, world!», чтобы вам не пришлось самому писать её в двухсотый раз.
  • archetypeVersion=1.4 указывает на версию артефакта «архетип».
  • interactiveMode=false отключает создание проекта в интерактивном режиме. Вы можете запустить цель archetype:generate без параметров, и Maven предложит установить параметры в процессе генерации. В данном случае нам это не нужно. Кстати, отключить интерактивный режим можно параметром -B . Полный список параметров для mvn можно получить по команде mvn -h .

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

my-app |-- pom.xml `-- src |-- main | `-- java | `-- com | `-- mycompany | `-- app | `-- App.java `-- test `-- java `-- com `-- mycompany `-- app `-- AppTest.java 

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

 4.0.0 com.mycompany.app my-app 1.0-SNAPSHOT my-app http://www.example.com UTF-8 1.7 1.7   junit junit 4.11 test    

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

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

Тег project является базовым и содержит всю информацию о проекте. В заголовке указана информация, необходимая Maven для понимания файла pom.xml . Тег modelVersion указывает на текущую версию POM. Эти два тега обычно генерируются автоматически, менять их не нужно.

Затем идёт информация, формирующая уникальный идентификатор проекта, теги groupId и artifactId . Её мы задавали выше при генерации из архетипа. Тег version тоже входит в эту группу. Он обычно генерируется и обновляется автоматически. После номера версии идёт суффикс -SNAPSHOT . Это означает, что проект находится в стадии разработки. В процессе выпуска ПО фреймворк уберёт этот суффикс, а если разработка продолжится — автоматически увеличит номер версии. Вместе эти три тега позволяют однозначно идентифицировать артефакт.

name содержит отображаемое имя артефакта, а url — ссылку на сайт. Поскольку сайт не задан при генерации, pom.xml содержит напоминание об этом в виде комментария. Кроме того, можно добавить краткое описание в description . Эти три тега зачастую используются при формировании документации.

Дальше мы видим блок properties . Здесь указаны особые настройки, такие как кодировка файла и используемая версия компилятора Java. Без этого блока можно обойтись, положившись на настройки по умолчанию.

Следом идёт очень важный блок dependencies . В нём описываются все используемые в проекте зависимости. Каждую необходимо выделить тегом dependency и указать уникальные идентификационные данные: groupId , artifactId и version . Maven сам подгрузит транзитивные зависимости. Кроме того, с помощью тега scope можно указать этапы, на которых будет использован артефакт. Сейчас в pom.xml всего одна зависимость — артефакт JUnit, библиотека для модульного тестирования на Java, которая будет использоваться только на стадии тестирования.

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

  1. Проверка — validate . Фреймворк проверяет, корректен ли проект и предоставлена ли вся необходимая для сборки информация.
  2. Компиляция — compile . Maven компилирует исходники проекта.
  3. Тест — test . Проверка скомпилированных файлов. В нашем случае будет использована библиотека JUnit.
  4. Сборка проекта — package . По умолчанию осуществляется в формате JAR. Этот параметр можно изменить, добавив в project тег packaging .
  5. Интеграционное тестирование — integration-test . Maven обрабатывает и при необходимости распаковывает пакет в среду, где будут выполняться интеграционные тесты.
  6. Верификация — verify . Артефакт проверяется на соответствие критериям качества.
  7. Инсталляция — install . Артефакт попадает в локальный репозиторий. Теперь его можно использовать в качестве зависимости.
  8. Размещение проекта в удалённом репозитории — deploy , — финальная стадия работы.

Эти фазы упорядочены и выполняются поочерёдно. Если необходимо собрать проект, система последовательно проведёт оценку, компиляцию и тестирование, и только после этого сборку. Помимо этого есть две фазы, выполняющиеся отдельно, только прямой командой. Это очистка — clean , удаляющая предыдущие сборки, и создание документации для сайта — site .

Закончим рассмотрение pom.xml секцией build . Она не является обязательной, в данном pom.xml в неё включены плагины из архетипа, однако можно обойтись и без них. Плагинов для Maven тысячи, освоившись с применением фреймворка вы сможете сами подобрать себе необходимые.

В проектах чуть серьёзнее, чем вычисление факториала, приходится использовать внешние ресурсы. Maven способен автоматически обрабатывать файлы ресурсов и размещать их в сборке проекта. Для этого их нужно разместить в папке src/main/resources . Файлы будут упакованы с сохранением внутренней структуры каталогов. Если же по какой-то причине нужно переопределить каталог, используйте вложенные теги resources , resource , directory в секции build :

   src/main/another_resources_directory    

Итак, с файлом описания мы разобрались. Попробуем собрать проект. Для этого перейдём в корневую папку и выполним команду нужной фазы, mvn package . Получим отчёт о сборке:

[INFO] ----------------------< com.mycompany.app:my-app >---------------------- [INFO] Building my-app 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory C:\javaProjects\new_project\my-app\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to C:\javaProjects\new_project\my-app\target\classes [INFO] [INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ my-app --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory C:\javaProjects\new_project\my-app\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ my-app --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to C:\javaProjects\new_project\my-app\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ my-app --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.mycompany.app.AppTest [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.217 s - in com.mycompany.app.AppTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ my-app --- [INFO] Building jar: C:\javaProjects\new_project\my-app\target\my-app-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 20.670 s [INFO] Finished at: 2019-02-17T02:25:07+03:00 [INFO] ------------------------------------------------------------------------ 

Теперь в корневом каталоге проекта вы обнаружите папку target, а в ней готовый файл my-app-1.0-SNAPSHOT.jar .

Запустите команду java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App — вы должны увидеть «Hello World!».

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

Maven

Maven — это инструмент для автоматической сборки проектов на основе описания их структуры в специальных файлах на языке POM (Project Object Model) — подмножестве XML.

Освойте профессию «Java-разработчик»

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

Зачем разработчики используют Maven

Функциональность системы сборки Maven шире, чем компилятора исходного кода. В процессе работы приложения Apache Maven вызывает компилятор и при этом автоматически управляет зависимостями и ресурсами, например:

  • загружает подходящие версии пакетов;
  • размещает изображения, аудио- и видеофайлы в нужных папках;
  • подгружает сторонние библиотеки.

Автоматическая сборка приложения особенно важна на этапах разработки, отладки и тестирования — Maven помогает собрать код и ресурсы в исполняемое приложение без IDE (среды разработки). При этом система сборки отличается гибкостью:

  • может использоваться в IDE — Eclipse, IntelliJ IDEA, NetBeans и других;
  • не зависит от операционной системы;
  • не требует установки — архив с программой можно распаковать в любой директории;
  • все необходимые параметры имеют оптимальные настройки по умолчанию;
  • упрощает организацию командной работы и документирование;
  • запускает библиотеки для модульного тестирования;
  • обеспечивает соблюдение стандартов;
  • имеет огромное количество плагинов и расширений.

Также существуют две другие системы сборки Java-приложений — Ant и Gradle, однако Maven пользуется наибольшей популярностью и является стандартом индустрии.

Профессия / 14 месяцев
Java-разработчик

Освойте востребованный язык

Group 1321314345 (4)

Установка и настройка среды Maven

Установочный файл системы сборки Apache Maven можно скачать с официального сайта. Программа займет около 10 Мб дискового пространства, но для создания локального репозитория потребуется не менее 500 Мб.

Для запуска системы на компьютере пользователя должен быть установлен пакет JDK, а в переменной окружения PATH указан путь к maven/bin. Если архив с Maven распаковали, предположим, в директорию C:\Utils, то путь будет выглядеть так: C:\Utils\maven\bin.

Чтобы установить переменную в Windows 10, нужно перейти в Панель управления Система Дополнительные параметры системы. Затем нажать Переменные среды, найти PATH и выбрать Изменить, после чего добавить путь C:\Utils\maven\bin в конец строки.

Локальный репозиторий

Репозиторий — это место для хранения и обновления файлов проекта. Директория на компьютере разработчика, в которой Maven хранит все jar-файлы отдельного проекта, библиотеки и необходимые модули (зависимости), называется локальным репозиторием. По умолчанию он располагается в папке Libraries\Documents\.m2.

Центральный репозиторий

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

Станьте Java-разработчиком
и создавайте сложные сервисы
на востребованном языке

Maven POM

В среде Maven «собранные» проекты называются артефактами, а не приложениями или программами. Термин выбран потому, что готовый проект не всегда является исполняемым приложением — он может быть модулем, плагином или библиотекой.

Для описания структуры проектов Apache Maven применяет разновидность языка XML под названием POM (сокращение от Project Object Model, «объектная модель проекта»). Основные теги POM:

  • project базовый тег, содержит всю информацию о приложении;
  • modelVersion генерируется автоматически, текущая версия — 4.0.0;
  • groupId пакет, к которому принадлежит приложение, с добавлением имени домена;
  • artifactId уникальный ID артефакта;
  • version создается и обновляется автоматически, во время разработки к номеру версии добавляется суффикс -SNAPSHOT.

Информация, заключенная в тегах, является минимально необходимым описанием проекта (minimal POM), представленным в файле pom.xml. Пример POM-файла выглядит так: 4.0.0 com.sample.app new-app 1.0-SNAPSHOT

Зависимости (Dependency)

Зависимостями разработчики называют сторонние библиотеки и модули, которые влияют на работоспособность программы. Maven обеспечивает автоматическое управление зависимостью — загружает модули и генерирует их описание в объектной модели проекта. В системе POM используются два тега — dependencies и dependency. Пример описания выглядит так: com.ourcompany.app our-first-app 2.0 war runtime com.ourcompany.app our-second-app 1.0 bar runtime

В нем тег runtime указывает на то, что зависимость относится к запуску приложения и не требуется для компиляции. В случае использования зависимости для компиляции тег имел бы вид compile, а для тестирования приложения — test.

Плагин Surefire для тестирования в системе Maven

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

  • текст без форматирования .txt;
  • файл .xml.

Если разработчику нужны отчеты в HTML-формате, можно установить дополнительное расширение для Surefire — Maven Surefire Report Plugin. По умолчанию отчеты во всех форматах сохраняются в папке /target/surefire-reports/. Плагин Surefire способен выполнять тестирование проекта как самостоятельно, так и в интеграции с другими популярными фреймворками для проведения тестов Java-приложений, например TestNG и Junit.

Профессия / 16 месяцев
Тестировщик-автоматизатор

Лучший выбор для быстрого старта в IT

cables (2)

Архетипы и структура проектов

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

mvn archetype:generate

Один из стандартных шаблонов представляет собой традиционнуюпрограмму «Hello, world!». Чтобы скачать архетип в свой локальный репозиторий, нужно выполнить команду:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Скачивание первого шаблона может занять продолжительное время — это происходит потому, что система сборки проверяет доступные обновления и плагины. По умолчанию приложение называется my-app. Перейти в его корневую директорию можно с помощью команды:

cd my-app

Архетипы позволяют начинающим разработчикам быстро познакомиться с необходимой структурой Java-проектов. В директории my-app находятся папки:

src/main/java с исходным кодом проекта;

src/test/java с тестовым кодом.

Для сборки проекта выполните команду:

mvn package

По ней Maven запускает компиляцию артефакта в jar-файл. Готовую программу запускают командой:

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

В результате на экране появится приветствие:

Hello, world!

Intellij IDEA позволяет создавать и запускать проекты без использования консоли. Узнать, как это сделать, можно из видео. https://www.youtube.com/embed/pt3uB0sd5kY Title Работа с Intellij IDEA. Источник

Maven многократно упрощает процесс разработки и сборки на всех этапах — от структурирования проекта и тестирования кода до «упаковки» готового артефакта. Умение работать с системой сборки необходимо любому Java-разработчику.

Java-разработчик

Java уже 20 лет в мировом топе языков программирования. На нем создают сложные финансовые сервисы, стриминги и маркетплейсы. Освойте технологии, которые нужны для backend-разработки, за 14 месяцев.

Что такое maven java

Мы создали классический «Hello, world», разберём его в деталях. Первое, во что мы упираемся, – это archetype , так в Maven называются шаблоны. Команда archetype:generate создает проект по архетипу. В нашем случае id по умолчанию приравнивается к 15 или maven-archetype-quickstart .

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

-DarchetypeArtifactId=maven-archetype-quickstart 

Полный список доступных шаблонов можно посмотреть на сайте или отдельно в консоли вбить mvn archetype:generate . Следом идет archetypeGroupId – что-то вроде пространства имён шаблонов. GroupId – обычно используется для указания производителя. Artifact – это название нашего проекта. Собственно, артефакты – это главная сущность в Maven, из них состоит всё.

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

test-app |-- pom.xml `-- src |-- main | `-- java | `-- com | `-- mycompany | `-- app | `-- App.java `-- test `-- java `-- com `-- mycompany `-- app `-- AppTest.java 

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

 4.0.0 com.mycompany.app test-app 1.0-SNAPSHOT 1.7 1.7   junit junit 4.12 test    

Большая часть этого файла сгенерирована и не нуждается в корректировке на стартовом этапе, кроме тега dependencies , именно здесь нужно будет объявлять зависимоcти, каждую в отдельном теге dependency . Сейчас там указана только библиотека для тестирования junit .

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

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

     org.apache.maven.plugins maven-compiler-plugin 3.8.1     

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

mvn package 

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

java -cp target/test-app-1.0-SNAPSHOT.jar com.mycompany.app.App 

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

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

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

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