Где находится файл настроек maven

Обновлено: 07.07.2024

Настраиваем pom.xml

Пока мы теоретизировали, получился вполне себе годный pom.xml: Смотреть код — Но, чтобы было что компилировать, его нужно добавить туда! Логично? — Да, капитан. бгг Поэтому добавим класс, в котором будет метод и два теста на него. Создадим обычную схему папок для Мавена:

В src/main/java создадим пакет, в котором будем работать. Чтобы составить его правильно, хорошо бы поставить в начало название организации ( groupId ), а потом имя проекта. В нашем случае это будет так: com.github.javarushcommunity.mavendemo Как по мне, то очень неплохой пакет. В нем создадим класс ImageComparator , к которому напишем два теста.

Подключаем Мавен и проект в целом к IDEA

  1. Сказать идее, где будут исходники кода, а где будут тесты.
  2. Добавить мавен проект в идею.
  • • src/main/java — Sources
  • • src/main/resources — Resources
  • • src/test/java — Tests
  • • src/test/resources — Test Resources
  • • target — Excluded

Пишем исходники и тесты к нашему “проекту”

Так, мавен в идею добавили, теперь опишем класс, который будет выступать для нас в роли исходников:

ImageComparator:

"Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 6

Под это дело создадим тесты. Класс, который тестирует, должен находиться в том же пакете, только в src/test/java. Идея об этом знает, и можно воспользоваться ее возможностями. Для этого на имени класс в самом файле нажимаем мышкой, и на появившейся лампочке выбираем Create test:Нам предложат выбрать настройки для будущего теста. Ничего не ставим, просто жмем OK: Для нашего теста возьмем из тестовых картинок image-comparison и положим их в тестовые ресурсы (src/test/resource). После этого напишем два теста. Один будет проверять, что эти две картинки разные. А в другой передадим одинаковую картинку и будем ожидать ответ, что они одинаковые. После получим такой тест: Тесты очень простые, останавливаться на них не буду. Если вам это будет интересно, как-нибудь напишу статью о тестировании (напишите об этом в комментариях).

Выполняем команды Мавена

  1. Скомпилировались наши исходники и поместили их в указанный путь.
  2. Команда прошла успешно — BUILD SUCCESS.

Вместо вывода

Сегодня мы быстро прошлись по тому, что такое Maven, что там есть, какие основные команды там есть. Я постарался донести это просто и с примерами. Все исходники примера лежат в организации JavaRush Community на GitHub в проекте maven-demo. Все вопросы пишите в комментариях. Традиционно предлагаю подписаться на мой аккаунт на гитхабе, чтобы не пропустить новый код для нашего проекта JRTB. Еще раз повторю, он не мертв. Он был просто в стазисе))

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

Автоматизация сборки - этап написания скриптов или автоматизация широкого спектра задач применительно к ПО, применяемому разработчиками в их повседневной деятельности, включая такие действия, как:

  • Компиляция исходного кода в бинарный код
  • Сборка бинарного кода
  • Выполнение тестов
  • Разворачивание программы на производственной платформе
  • Написание сопроводительной документации или описание изменений новой версии

Apache Maven - это фреймворк для автоматизации сборки проектов, компиляции, создания jar, создания дистрибутива программы, генерации документации. Если собирать большие проекты с командной строки, то команда для сборки будет очень длинной, поэтому её иногда записывают в bat/sh скрипт. Но такие скрипты зависят от платформы. Для того чтобы избавиться от этой зависимостии и упростить написание скрипта используют инструменты для сборки проекта.

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

  • Независимость от OS. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же.
  • Управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек(зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями. Что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.
  • Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере (Continuous Integration).
  • Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты которые собираются c помощью maven. При этом зачастую проект настраивать не нужно - он сразу готов к дальнейшей разработке.
  • Как следствие - если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же - меньше дублирования данных и соответственно ошибок.
  • Декларативное описание проекта.
  • Неочевидность. Если в Ant указывается команда на удаление - и удаляется файл, то в случае Maven надо всем сердцем довериться плагину и документации по нему.
  • При таком объёме необходимых знаний документации не так много, особенно по каким-то специальным моментам. Да и просто читать придётся много. Порог вхождения, если потребуется собирать даже не самое сложное приложение куда выше, чем у Ant.
  • Если нужно найти какой-то специальный плагин - это будет сделать непросто, плагинов много. И не факт, что найденный подойдёт на все 100% и будет работать без ошибок.
  • Нужен доступ в интернет (или придётся разворачивать собственный репозиторий, что трудоёмко)
  • Большие трудности, если проект не типовий.

Вот основные аспекты, которыми позволяет управлять Maven:

  • Создание (Build)
  • Документирование (Documentation)
  • Отчёты (Reporting)
  • Зависимости (Dependencies)
  • Релизы (Releases)
  • SCM
  • Список рассылки (Mailing list)
  • Дистрибьюция (Distribution)
  • Как узнать какую версию Maven вы используете?

Основной целью Maven является предоставление разработчику:

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

Структура и сожержание проекта Maven указывается в специальном xml-файле, который назывется Project Object Model (POM), который является базовым модулем всей системы.

В Maven стандартная структура каталогов, благодаря ей отпадает необходимость прописывать пути к файлам проекта. В корневом каталоге проекта находится pom.xml и несколько текстовых файлов. Всё остальное хозяйство аккуратно разложено в подкаталогах. Главные из них - src и target. Однако, порядок сохраняется и вглубь:


  • Где вы хранятся файлы классов при компиляции проекта Maven?

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

Корневой элемент <project>, схема, которая облегчает редактирование и проверку, и версия pom.xml. Внутри тега project содержится основная и обязательная информация о проекте.

Среди информации которую содержит pom.xml мы можем выделить следующие:

  • Зависимости проекта (project dependencies)
  • Плагины (plugins)
  • Задачи/цели (goals)
  • Профиль создания (build profiles)
  • Версия проекта (project version)
  • Разработчики (developers)
  • Список рассылки (mailing list)

Все POM - файлы являются наследниками родительского pom.xml. Этот POM-файл называется Super POM и содержит значения, унаследованные по умолчанию.

  • Какие элементы необходимы для минимального POM?

Требуемые элементы для минимального POM ето корневий елемент, modelVersion, GroupID, artifactID и версия. Минимальный POM файл:


Зависимость (dependency) - это те библиотеки, которые непосредственно используются в вашем проекте для компиляции кода или его тестирования.

Артефакт (artefact) - это, по сути, любая библиотека, хранящаяся в репозитории (месте хранения). Это может быть какая-то зависимость или плагин. Обычно артефактом является JAR-файл, который хранится в репозитории Maven. Каждый артефакт содержит group ID, artifact ID и версию.

Плагин (plugin) - это зависимости Maven'а, расширяющие его функционал.

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

Архетип (archetype) - это некая стандартная компоновка файлов и каталогов в проектах различного рода (веб, swing-проекты и прочие). Другими словами, Maven знает, как обычно строятся проекты и в соответствии с архетипом создает структуру каталогов.

Репозиторий (repository) - глобальное хранилище всех библиотек, доступных для Maven, это место где хранятся артефакты: jar файлы, pom-файлы, javadoc, исходники, плагины.

  • Какая команда установляет JAR-файл в локальное хранилище?

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

  • Какие два файла настройки есть в Maven, как они называются и где расположены?

В Maven, файлы настройки называются settings.xml, и они расположены в двох местах:

  • Каталог где установлен Maven: $M2_Home/conf/settings.xml
  • Домашняя директория пользователя: $/.m2/settings.xml

Жизненный цикл сборки(Lifecycle) - это чётко опредлённая последовательность фаз во время выполнения которых должын быть достигнуты определённые цели. Здесь фаза представляет собой стадию жизненного цикла.

  • Назовите основные фазы жизненного цикла сборки Maven?

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

В Maven есть следующие 3 стандартных жизненных цикла:

  • Очистка (clean) - очищает артефакты, созданные до сборки.
  • Сборка (default or build) - используется для создания приложения.
  • Создание сайта проекта (site) - генерирует документацию сайта для проекта.

mvn clean - эта команда очищает целевую директорию от созданных в процессе сборки файлов.

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

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

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

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

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

25–27 ноября, Онлайн, Беcплатно

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

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

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

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

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

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

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

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

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

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

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 сгенерирует следующую структуру проекта:

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

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

Что значат теги в 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 :

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

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

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

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

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

Слово maven происходит из языка Идиш и означает примерно «собиратель знания».

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


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

Шаг 2. Установка Maven в OS Windows

Для начало скачаем Framework Maven.

После того как мы скачали Maven, начинаем его установку.

1. Распаковываем zip архив в любую удобную для вас директорию, я распаковываю в корень диска для удобства C:\\apache-maven-3.0.5

2. Создаем переменную среды с именем M2_HOME.

3) В этом же диалоговом окне создайте переменную с именем M2 и присвойте ей значение %M2_HOME%\bin

4) Здесь же создайте еще переменную MAVEN_OPTS и присвойте ей значение -Xms256m или -Xmx512m. Это зависит от настроек вашей виртуальной машины. Данный пункт является необязательным, он просто дает некоторые дополнительные возможности для Maven.

5) Здесь же создайте или измените переменную Path, присвоив ей значение %M2%. Данное действие позволит нам работать с Maven через командную строку.

6) Также убедитесь, что у вас есть переменная с именем JAVA_HOME и она содержит путь к вашему JDK. К примеру: C:\Program Files\Java\jdk1.7.0

7) Откройте командную строку и выполните в ней mvn —version, чтобы убедиться в корректной установке. Вы должны увидеть информацию о текущей версии Maven.

Шаг 3. Установка Maven в Intellij IDEA

Или же если вы пользуетесь средой разработки Intellij IDEA, то достаточно зайти в Maven и установить путь: C:\\apache-maven-3.0.5 :

Читайте также: