Урок 43: Введение в Maven
Maven — это инструмент для управления проектами и сборки на Java. Он помогает автоматизировать процесс сборки, управления зависимостями, документации и отчетности. В этом уроке мы рассмотрим основные концепции Maven, как создать простой Maven проект и как управлять зависимостями.
Создание Maven проекта
Для создания Maven проекта необходимо иметь установленный Maven и выполнить команду:
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Эта команда создаст структуру проекта Maven с минимальной конфигурацией.
Файл pom.xml
Основным файлом конфигурации Maven является pom.xml
. В нем указаны зависимости, плагины и другие настройки проекта. Пример 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.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Запуск Maven сборки
Для сборки проекта используется команда:
Эта команда очищает проект, компилирует код, запускает тесты и упаковывает проект в JAR-файл.
Результат выполнения
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ my-app ---
[INFO] Deleting /path/to/project/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /path/to/project/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /path/to/project/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /path/to/project/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /path/to/project/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ my-app ---
[INFO] Surefire report directory: /path/to/project/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.example.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.011 sec
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-app ---
[INFO] Building jar: /path/to/project/target/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.678 s
[INFO] Finished at: 2023-05-15T12:34:56+02:00
[INFO] Final Memory: 15M/245M
[INFO] ------------------------------------------------------------------------
Упражнения
Упражнение 1: Добавление зависимости
Добавьте зависимость к библиотеке Gson в ваш проект Maven. Используйте последнюю версию библиотеки.
Решение:
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
</dependencies>
Объяснение: Зависимость к библиотеке Gson добавлена в файл pom.xml
. Maven автоматически загрузит библиотеку и добавит ее в проект.
Упражнение 2: Создание Maven-плагина
Создайте Maven-плагин, который будет выводить "Hello, Maven!" во время сборки проекта.
Решение:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>Hello, Maven!</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Объяснение: В этом решении создан плагин, который выполняется на этапе валидации сборки проекта и выводит сообщение "Hello, Maven!"