Что такое maven и зачем он нужен
Часть 4. Основы Maven
Пошаговая установка Maven
Для начала нужно установить Maven, скачав его по этой ссылке.
Далее необходимо распаковать скачанный архив и установить переменной окружения M2_HOME ссылку на местонахождение распакованного архива. Например, C:\Program Files\maven\
Чтобы проверить, что все установилось, в командной строке пропиши:
Если отобразится информация о версии Maven, Java и т.д., все готово к работе.
Теперь открой IntelliJIDEA и создай новый проект. В первом же окне выбери Maven:
Нажми Next и заполни следующее диалоговое окно:
Далее стандартно создай проект в необходимом месте.
После того, как проект создался, обрати внимание на его структуру:
Управление зависимостями в Maven
На сайте библиотеки. Если нам нужен Apache Commons IO, переходим на официальный сайт, выбираем вкладку Dependency Information. Здесь есть вся необходимая информация — ее можно просто скопировать и добавить в наш раздел dependencies.
В Maven-репозитории. В поиске введи “apache commons io”, и ты увидишь все доступные версии библиотеки. После выбора нужной, просто скопируй:
и добавь в свой pom.xml.
Виды Maven-репозиториев
Сборка Java-проекта с помощью Maven
через командную строку:
используя Intellij IDEA:
До запуска package выполняются фазы validate, compile, test. Исключение — фаза clean. Ее желательно вызывать перед каждой новой сборкой проекта. Фазы можно перечислить через пробел:
Maven — автоматизация сборки проекта
Вобщем все как всегда. Какая-то подобная штука вроде бы и не помешала бы, но все и так хорошо работало и лень было изучать псевдопомогающую технологию. Так было до тех пор, пока я не познакомился с Java…
С приходом джавы в мою жизнь, взгляд на вопрос использовать или нет автоматический билдер отпала сама собой — использовать. Ведь какой фрик будет вручную компилировать все файлы по всем директориям проекта и копировать их для деплоя в каталог контейнера сервлетов? Только очень терпеливый и не ленивый человек. Но лень двигатель прогресса и я начал читать про… maven.
Даже не знаю как он мне подвернулся. Вероятно после одного из запросов в гугл в процессе обучениям основ tomcat’а я получил знания о существовании этой программы. Уже четвертый продукт от Apache, который мне понадобился на пути к развертыванию первого проекта на java.
Жизненный цикл у мавена довольно ожидаемый:
Конфигурация требует небольшого пояснения. Так path отвечает за путь на который будет развернут сервлет. Так как мы разворачиваем полноценное самодостаточное веб-приложение, то разворачивать будем в /. Url указывает на путь к менеджеру хоста, через который будем проводить деплой. Сервлет менеджера создается обычно во время создания нового виртуального хоста. Server указывает id сервера. Тут нужно еще более углубиться в объяснения…
Так как для деплоймента через хост менеджер нужно пройти авторизацию, а указывать данные для логина в файле конфигурации не самое правильное решение, так как от сервера к серверу данные могут изменяться, поэтому используется указатель по id. Сами же данне авторизации конфигурируются в файле
username и password должны соответствовать пользователю с правами manager из файла tomcat-users.xml (подробнее в предыдущей статье о сервлетах).
Да. Напоследок хочу сказать, что мавен так же диктует свою иерархию директорий, но чтобы не создавать её вручную, достаточно выполнить:
А для eclipse есть специальный плагин, который упростит создание и сопровожение проекта.
Maven – размышления после двух лет использования
В течение последних двух лет я использовал Maven как инструмент для сборки проектов. В результате я остался весьма недоволен Мавеном, недоволен настолько, что всерьез обдумываю перевод нынешнего проекта на Ant.
Прежде, чем обсуждать причины моего недовольства, нужно сказать пару слов о Мавене. Я не буду его подробно описывать, просто кратко изложу его основные особенности.
Что такое Мавен?
Реальность
Как видно, в теории Мавен — очень мощный и интересный инструмент. На практике же картина выглядит несколько по-иному. Безусловно, у Мавена есть определенные достоинства, но также, увы, и много весьма ощутимых недостатков.
Начнем с достоинств. Сборка при помощи Мавена происходит очень просто. Достаточно в корне проекта написать mvn clean install — и проект соберется! Не надо заниматься поиском и скачиванием нужных библиотек, не надо изучать скрипты. Эта команда будет работать всегда, вне зависимости от типа проекта.
Кроме того, поскольку Мавен очень способствует стандартизации структуры директорий (читай: крайне затрудняет работу с нестандартной структурой), всегда довольно легко понять где что находится.
Поскольку проект описывается именно в виде модели, становятся возможными некоторые интересные вещи. Например, можно из проекта Мавена автоматически создать проект для, например, Эклипса — при этом в Эклипсовском проекте уже будут правильно настроены все директории, подключены библиотеки и так далее.
На этом список достоинств заканчивается. Переходим к недостаткам.
Мавен плохо документирован. Документация вроде как есть, но найти ответ на многие вопросы практически невозможно. Это касается как самого Мавена, так и его плагинов. Более того, даже книга «Maven: the definitive guide», хотя и проясняет многие вещи, но оставляет очень много вопросов открытыми.
Мавен болтлив, но вместе с тем невразумителен. В стандартном режиме он выводит во время сборки огромное количество всевозможной информации, как правило совершенно ненужной. Отладочный режим — это просто катастрофа! На нашем проекте в этом режиме Мавен при сборке выводил более 80 тысяч строк! При этом сообщения об ошибках и проблемах зачастую крайне туманны и загадочны.
Модели проекта длинны, плохо читаемы и трудно изменяемы. Муторный синтаксис на основе XML; наследование моделей, в результате чего зачастую приходится просматривать несколько моделей, чтобы определить, какая же конфигурация в конце концов будет использована при сборке; размазывание конфигурации по разным частям модели — вот далеко не полный перечень факторов, которые приводят к такой ситуации.
Процесс сборки зависит от внешних систем. Именно — от репозиториев. У меня был случай, когда у одного нового сотрудника возникли необъяснимые проблемы со сборкой проекта. В конце концов выяснилось, что у одного из репозиториев поменялся URL. Те, у кого Мавен уже успел скачать все что нужно, ничего не замечали; а вот новые сотрудники не могли собрать проект.
Мавен в процессе сборки скачивает огромное количество всевозможных файлов. Дело в том, что одним из элементов системы управления зависимостями Мавена является локальный репозиторий. Все, что оказывается нужным для сборки, Мавен скачивает и устанавливает в этот самый локальный репозиторий. С одной стороны, это хорошо — если какая-нибудь библиотека нужна в нескольких проектах, она будет скачана только один раз, а потом Мавен будет брать ее из этого самого местного репозитория. С другой стороны, количество скачанного поражает воображение. Например, на моем рабочем компьютере, на котором я собирал около пяти разных (но однотипных) проектов, репозиторий занимает больше гигабайта, и содержит четыре с половиной тысячи файлов и директорий!
Мавен плохо подходит для автоматизации «около-сборочных» задач. Мне часто в разных проектах встречались некоторые действия, зачастую не имеющие отношения к основной сборке, которые требовали автоматизации: скопировать файлы из одной части проекта в другую, обработать код анализаторами, почистить некоторые директории и так далее. Когда я пользовался Антом, я создавал дополнительные цели в проекте — и все было прекрасно (ну да, проект при этом усложнялся, но все было документировано). Мавен просто не дает такой возможности.
Очень жесткий подход Мавена в отношении последовательности сборки, создает большие трудности в тех случаях, когда нужно хотя бы на шаг от этой последовательности отойти. К примеру, мне в какой-то момент понадобилось дважды скомпилировать один и тот же модуль, но с разными настройками, и потом поместить два результата в разные места под разными именами. Это оказалось сделать очень и очень нетривиально.
Мавен труден для понимания и освоения. Причины — все вышеизложенное.
Maven в Java подробно
Maven – мощный инструмент сборки для Java-проектов. Это инструмент управления и автоматизации. Он в основном написан на языке Java и используется для создания и управления проектами, написанными на C #, Ruby, Scala и других языках.
Что такое Maven?
Maven – действительно мощный инструмент управления проектами, который используется для создания и управления любым проектом, связанным с Java. Maven помогает облегчить работу Java-разработчика. Он способен обрабатывать сборку проекта, отчеты и документацию.
Здесь есть определенные термины, которые могут быть для вас новыми.
Как установить?
Вам необходимо выполнить следующие простые шаги:
Файл Maven pom.xml
POM означает объектную модель проекта. Файл pom.xml содержит информацию о проекте и информацию о конфигурации для сборки проекта. Он содержит зависимости, каталог сборки, каталог с исходным кодом, каталог с исходным кодом теста, плагин и т. д. Maven просматривает файл pom.xml, а затем выполняет цель. Для создания простого файла pom.xml вам потребуются следующие элементы:
Ниже показан образец файла pom.xml:
В файле pom.xml есть некоторые дополнительные элементы:
Пример кода файла pom.xml, показывающий дополнительные элементы:
Репозиторий
Репозиторий – это просто каталог на вашем компьютере. Здесь хранятся jar-файлы проекта, плагины или любые другие материалы, относящиеся к проекту. Всякий раз, когда нужно искать какую-либо зависимость, это делается в репозиториях. Maven инициализирует поиск из локального репозитория, затем из центрального и, наконец, из удаленного.
Локальный
Локальный репозиторий Maven – это папка на вашем компьютере, где хранятся все связанные с проектом элементы. Как только сборка Maven выполняется, Maven автоматически загружает все jar-файлы зависимостей в локальный репозиторий. По умолчанию локальным репозиторием maven является каталог user_home / m2.
Центральный
Если какая-либо зависимость не найдена в локальном репозитории, Maven проходит через центральный репозиторий. Затем Maven загружает эти зависимости в ваш локальный репозиторий.
Удаленный
Когда Maven хочет загрузить зависимость, она переходит в удаленный репозиторий. Удаленный репозиторий – это репозиторий на веб-сервере, который широко используется для размещения внутренних проектов организации.
Преимущества и недостатки
Руководство по Maven. Введение.
Maven – основные понятия
Maven – это средство для управления и сборки проектов. Он позволяет разработчикам полностью управлять жизненным циклом проекта. Благодаря этому, команда может автоматизировать процессы, связанные со сборкой, тестирование, упаковкой проекта и т.д.
В случае, когда над проектом работает несколько команд разработчиков, Maven позволяет работать в соответствии с определенными стандартами.
Вот основные аспекты, которыми позволяет управлять Maven:
Для чего Maven создан?
Основной целью Maven является предоставление разработчику:
Структура и содержание проекта Maven указывается в специальном xml-файле, который называется Project Object Model (POM), который является базовым модулем всей системы.
Соглашение по конфигурации
В Maven используется Соглашение по конфигурации.
Разработчики не обязаны указывать каждую деталь. Maven обеспечивает поведение проекта по умолчанию. Когда мы создаём проект с использованием этой технологии, то Maven создаёт базовую структуру проекта. Разработчики несут ответственность только за соответственное размещение файлов.
Ниже указаны значения по умолчанию для исходного кода проекта и других модулей.
исходный код | /src/main/java |
Ресурсы | /src/main/resources |
Тесты | /src/test |
Дистрибутив JAR | /target |
Скомпилированный байт-код | /target/classes |
Для того, чтобы построить проект, Maven предоставляет нам настройки для управления жизненным циклом проекта и его зависимостями. Большая часть его задач поддерживается плагинами Maven.
Мы даже можем создавать проекты с использованием Maven без понимания того, как работают эти отдельные плагины.
В этом уроке мы изучили базовые понятия фреймворка Maven.