Создание Maven проекта

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

Архетипы

Для создания новых проектов в Apache Maven проще всего использовать архетипы (archetypes). Архетип это шаблон вашего будущего проекта или, цитируя официальную документацию: «архетип есть модель по которой делаются все остальные вещи такого рода». Всего существует порядка 1800 известных архетипов и еще больше неопубликованных или распространяемых cо сторонними библиотеками.

Мы не будем использовать все архетипы сразу, а возьмём один из самых простых и создадим проект в maven:

Параметров у команды много, но они не такие страшные как кажется:

  • -DarchetypeArtifactId=maven-archetype-quickstart — выбирает архетип maven-archetype-quickstart
  • -DinteractiveMode=false — говорит maven, что мы знаем что делаем и что мы не хотим вести диалог.

А вот оставшиеся переменные одним словом не описать. Дело в том, что каждый maven проект (который здесь принято называть артефактом (artifact)), имеет своё собственное имя, называемое координатами (Maven coordinates). Артефакт имеет три обязательных координаты:

  • -DgroupId=ru.morningjava.maven — группа. Обычно группа связана с названием компании, разработчика или большого продукта. Например сам maven и связанные с ним проекты используют группу org.apache.maven
  • -DartifactId=hellomaven — имя артефакта. То, как мы называем проект.
  • -Dversion=1  — версия артефакта. Я не собираюсь его активно развивать, поэтому версия будет сразу 1 🙂

Иногда эти координаты записывают как groupId:artifactId:version. Используя координаты артефактов, можно на них однозначно ссылаться и maven сможет самостоятельно разрешить эти ссылки.

Структура проекта

Maven использует подход известный как соглашение по конфигурации (convention over configuration) и ожидает, что вы расположите файлы исходного кода определённым образом:

В частности maven ожидает, что все исходники будут располагаться в каталоге src, причём исходный код программы в подкаталоге main/java, а исходный код тестов, в каталоге test/java. Существует ещё несколько стандартных каталогов, но они, обычно, специфичны для той или иной платформы, например для Android.

Использованный для создания проекта архетип самостоятельно сгенерировал каталоги для Java package, используя координаты проекта для его названия. Однако это не ограничивает вас только заранее созданным package. Можно создать новый package (например org.example.test), можно удалить предложенный и создать
другой итд., главное, что бы каталоги и файлы исходников были размещены в стандартном месте.

Помимо стандартных каталогов  проект так же включает в себя описание проекта, располагающееся в файле pom.xml в корне проекта

pom.xml

Название POM происходит от «Project Object Model» и оно настолько глубокомысленно, что я даже не рискну его переводить.  Впрочем это и не требуется. Важнее знать, что pom.xml полностью (за небольшими исключениями) описывает весь проект: его координаты, зависимости, процесс сборки итд.

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

Описание может выглядеть и так:

В официальной документации по pom.xml перечислено ещё больше идей по улучшению описания проекта.

Код примера доступен на github. Честно сказать, я сомневался, стоит ли выкладывать пустой проект, но потом подумал, что может быть кому-то будет интересно сравнить со своим.