Что такое Maven, и где он обитает?
Лаконичный гайд по первым шагам в использовании maven. Пишем свой первый проект.
Мавен – это фреймворк автоматической сборки проектов с широким функционалом – достаточно широким, чтобы неподготовленный разработчик, зашедший в эти дебри, заработал головную боль, сломал себе проект и ногу, а то и обе. Сегодня мы попробуем буквально за 10 минут освоить главные фишки мавен : управление зависимостями, в том числе транзитивными, и автоматическую сборку. Если вдруг вы не знакомы с понятием транзитивных зависимостей, это цепочка A ← B ← C, где A зависит от В, а В от С. Maven позволяет не запариваться по этому поводу, и если вам нужен именно А, указывать только его, об остальном позаботится за вас.
Я предполагаю, что у вас уже установлена java, если нет, то срочно это исправьте. Maven использует декларативный подход, где все инструкции записываются на языке разметки POM – обычном XML с рядом предопределенных сущностей. В данной статье примеры будут достаточно просты, так что курсы XML пока можно отложить.
Установка Maven.
Задача проста.
- Идем на главный сайт проекта, скачиваем подходящий для вашей системы архив и распаковываем в удобную директорию, желательно без кириллицы в названии.
- Прописываем директорию в переменные окружения PATH.
- Рекомендую проверить наличие в PATH JAVA_HOME.
Первый проект Maven
Все современные IDE позволяют создать проект maven буквально двумя кликами, но мы не станем срезать путь. Для создания простейшей директории запустите в консоли команду:
mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=test-app
Мы создали классический "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, открываем его.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>test-app</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>
Большая часть этого файла сгенерирована и не нуждается в корректировке на стартовом этапе, кроме тега dependencies
, именно здесь нужно будет объявлять зависимоcти, каждую в отдельном теге dependency
. Сейчас там указана только библиотека для тестирования junit
.
Важные тонкости
Напоследок хочу обратить внимание на несколько пунктов. По умолчанию Maven работает с java 1.6, чтобы это поправить, нужно внутри тега project добавить следующий код, заменив {Ваша версия java}
на соответствующий номер.
<properties> <maven.compiler.release>{Ваша версия java}</maven.compiler.release> </properties> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> </plugin> </plugins> </pluginManagement> </build>
Поздравляю, проделанной работы достаточно, чтобы прописать команду сборки:
mvn package
Фреймврок автоматически пройдет цепочку из 6 этапов, и теперь остается только запустить:
java -cp target/test-app-1.0-SNAPSHOT.jar com.mycompany.app.App
Наслаждаемся результатом трудов! =)
Этого должно быть достаточно для базового понимания Maven. Если вы загорелись идеей освоить этот инструмент и использовать весь его функционал, стоит начать с детального изучения super POM, шаблонов и плагинов. Удачи вам в освоении новых рубежей ;)