
Maven обеспечивает стандартизированную структуру сборки для Java-приложений и автоматизирует управление зависимостями. Процесс начинается с установки JDK версии не ниже 17 и корректной настройки переменных окружения JAVA_HOME и MAVEN_HOME. Проверка командой mvn -v подтверждает готовность инструментов.
Для инициализации проекта используется команда mvn archetype:generate, позволяющая выбрать подходящий шаблон, например maven-archetype-quickstart. Важно задать уникальные значения groupId, artifactId и version, чтобы избежать конфликтов при последующих релизах.
Файл pom.xml определяет все зависимости, плагины и цели сборки. Рекомендуется фиксировать конкретные версии библиотек и использовать центральный репозиторий Maven Central для воспроизводимости процесса. Добавление плагина maven-compiler-plugin с указанием параметров source и target гарантирует совместимость исходного кода с выбранной версией Java.
Сборка выполняется командой mvn clean package, которая очищает предыдущие артефакты и создаёт итоговый JAR или WAR-файл в каталоге target. Для ускорения процесса на сервере непрерывной интеграции рекомендуется использовать локальный кэш репозитория и опцию -T для параллельной компиляции.
Установка и настройка Apache Maven в локальной среде

1. Загрузка дистрибутива: перейдите на официальный сайт https://maven.apache.org/download.cgi, выберите актуальную версию Binary zip archive, скачайте архив и распакуйте его в каталог без пробелов, например C:\Tools\maven или /opt/maven.
2. Настройка переменных окружения: добавьте системную переменную MAVEN_HOME с путём к распакованной папке Maven. Включите путь %MAVEN_HOME%\bin (Windows) или $MAVEN_HOME/bin (Linux/macOS) в переменную PATH, чтобы команда mvn была доступна в терминале.
3. Проверка установки: откройте командную строку и выполните mvn -v. Отобразятся версии Maven, Java и данные о Java-поставщике. Несовпадение версий JDK или отсутствие переменной PATH указывает на некорректную конфигурацию.
4. Конфигурация settings.xml: файл conf/settings.xml позволяет задать локальный репозиторий, зеркала репозиториев, прокси и профили сборки. Для хранения зависимостей в отдельном каталоге укажите, например: <localRepository>/data/maven/repo</localRepository>.
5. Обновление и поддержка: при смене версии Maven замените каталог установки и обновите переменные окружения. После обновления выполните mvn -v для контроля корректности.
Создание нового проекта с помощью архетипа Maven

Для генерации структуры проекта используйте команду:
mvn archetype:generate -DgroupId=com.example.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
groupId определяет уникальный идентификатор организации или пакета, обычно в формате обратного домена. artifactId задаёт имя артефакта, которое станет именем итогового JAR или WAR. Параметр archetypeArtifactId выбирает шаблон проекта, например maven-archetype-quickstart для консольного приложения. Флаг interactiveMode=false отключает интерактивные запросы и позволяет использовать значения напрямую.
После выполнения команды Maven создаёт каталог с именем артефакта, включает стандартную иерархию src/main/java и src/test/java, файл pom.xml и пример исходного кода. Для проверки структуры выполните tree my-app или откройте проект в IDE.
Чтобы выбрать другой архетип, выполните предварительно mvn archetype:generate без параметров и найдите нужный идентификатор в списке, затем повторите генерацию с выбранным шаблоном.
Подключение зависимостей в файле pom.xml

Файл pom.xml управляет версиями библиотек через секцию <dependencies>. Каждая зависимость описывается внутри <dependency> с обязательными элементами: <groupId> – идентификатор организации или проекта, <artifactId> – имя артефакта, <version> – конкретная версия.
Пример минимальной записи для подключения JUnit 5:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
Использование <scope> позволяет ограничить область применения зависимости: compile для основных модулей, test для тестов, provided если библиотека будет предоставлена средой выполнения, runtime для зависимостей, необходимых только при запуске.
Для контроля версий и исключения конфликтов применяйте секцию <dependencyManagement>. Здесь фиксируются версии, которые затем наследуются в дочерних модулях без явного указания номера.
При работе с большими проектами добавляйте репозитории в <repositories>, если библиотека отсутствует в центральном хранилище Maven. Указывайте URL, id и при необходимости учетные данные.
Рекомендуется явно задавать версии всех зависимостей и регулярно выполнять команду mvn dependency:tree для анализа цепочки и выявления дубликатов.
Компиляция исходного кода через команду mvn compile
Команда mvn compile запускает фазу compile жизненного цикла Maven, преобразуя исходные файлы Java из каталога src/main/java в байт-код. Скомпилированные классы сохраняются в директории target/classes.
Перед выполнением убедитесь, что в pom.xml корректно указана версия JDK в секции maven-compiler-plugin, например:
<configuration><source>17</source><target>17</target></configuration>
Запустите компиляцию из корневого каталога проекта командой:
mvn compile
Для повторной компиляции после изменений очистите директорию target командой mvn clean compile. Это исключает конфликт старых артефактов с новым кодом.
Если проект зависит от внешних библиотек, Maven автоматически загрузит их из репозитория согласно настройкам dependencies в pom.xml, что гарантирует корректную компиляцию без ручной установки JAR-файлов.
Запуск модульных тестов командой mvn test

Команда mvn test выполняет фазу тестирования проекта Maven и запускает тесты, расположенные в каталоге src/test/java. По умолчанию применяются фреймворки JUnit или TestNG, если они добавлены в зависимости pom.xml.
- Все тестовые классы должны следовать шаблону имени
*Test.java, иначе их нужно указать вручную в конфигурации плагина Surefire. - Параметр
-Dtest=ИмяКлассапозволяет запускать конкретный класс, пример:mvn test -Dtest=UserServiceTest. - Для запуска отдельных методов используйте
-Dtest=Класс#метод, напримерmvn test -Dtest=UserServiceTest#shouldSaveUser. - Опция
-DskipTestsкомпилирует тесты без их выполнения:mvn install -DskipTests. - Опция
-Dmaven.test.failure.ignore=trueпродолжает сборку даже при неудачных тестах.
Рекомендуется явно фиксировать версии плагина maven-surefire-plugin в pom.xml для стабильного поведения. Пример конфигурации:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0</version>
</plugin>
Перед запуском убедитесь, что зависимости для тестов указаны с областью test, иначе Maven не сможет их загрузить.
Формирование итогового JAR файла с использованием mvn package

Для создания итогового JAR файла необходимо выполнить команду:
mvn package
Она компилирует исходный код, выполняет тесты и формирует артефакт в папке target. Рекомендуется проверить, что в pom.xml указаны корректные значения для следующих тегов:
| Тег | Назначение |
|---|---|
| <groupId> | Уникальный идентификатор организации или проекта |
| <artifactId> | Название проекта, используемое при формировании имени JAR |
| <version> | Версия проекта, отражается в имени JAR файла |
| <packaging> | Тип упаковки: jar, war или другой |
| <mainClass> | Полный путь к классу с методом main, указывается в плагине maven-jar-plugin |
После выполнения mvn package JAR файл формируется по пути:
target/<artifactId>-<version>.jar
Для включения зависимостей в один исполняемый JAR используется плагин maven-assembly-plugin с конфигурацией:
| Параметр | Описание |
|---|---|
| descriptorRefs | jar-with-dependencies – добавляет все зависимости в итоговый JAR |
| finalName | Имя итогового JAR без версии, например app |
Для сборки с зависимостями выполняется команда:
mvn clean compile assembly:single
В результате формируется JAR в папке target с именем вида:
<artifactId>-<version>-jar-with-dependencies.jar
Важно контролировать размер JAR и исключать лишние зависимости через excludes в конфигурации плагина, чтобы минимизировать артефакт и ускорить запуск приложения.
Для проверки работоспособности итогового JAR выполняют:
java -jar target/<artifactId>-<version>.jar
Если приложение запускается без ошибок, JAR готов к распространению или деплою.
Вопрос-ответ:
Что такое Maven и зачем он нужен в Java-проектах?
Maven — это инструмент для управления проектами и автоматизации сборки Java-приложений. Он позволяет описать структуру проекта, зависимости от внешних библиотек и порядок сборки в едином файле конфигурации. С помощью Maven можно легко получать необходимые библиотеки из центрального репозитория, управлять версиями и стандартизировать процесс компиляции, тестирования и упаковки приложения.
Как создать новый проект с использованием Maven?
Создание проекта начинается с команды Maven для генерации структуры по шаблону. Обычно используют команду mvn archetype:generate, после чего выбирают тип архетипа, указывают имя группы и артефакта. В результате создаётся стандартная структура каталогов с папками для исходного кода, ресурсов и тестов, а также файл pom.xml, в котором будут храниться зависимости и настройки сборки.
Каким образом добавлять зависимости в проект Maven?
Все зависимости указываются в файле pom.xml внутри тега <dependencies>. Для каждой библиотеки необходимо указать группу, имя артефакта и версию. Maven автоматически скачает нужные файлы из центрального репозитория и подключит их к проекту. После добавления зависимости достаточно выполнить команду mvn compile, чтобы она стала доступна в процессе сборки.
Как собрать и запустить проект с Maven?
Для компиляции исходного кода используют команду mvn compile, для запуска тестов — mvn test. Чтобы создать исполняемый пакет, применяют mvn package, который формирует файл JAR или WAR в зависимости от конфигурации проекта. После этого приложение можно запускать через java -jar target/имя_проекта.jar. Maven автоматически учитывает зависимости, указанные в pom.xml, поэтому вручную подключать библиотеки не требуется.
