Использование Maven для управления проектом
На этом этапе вы узнаете, как использовать Apache Maven для управления проектом на Java. Maven - это мощный инструмент автоматизации сборки и управления зависимостями, который упрощает настройку и поддержку проекта.
Понимание Maven
Maven предоставляет:
- Стандартную структуру проекта
- Управление зависимостями
- Автоматизацию сборки
- Управление информацией о проекте
- Консистентный процесс сборки для всех проектов
Настройка проекта с использованием Maven
Создадим новый проект с помощью Maven:
- Сначала проверьте, установлен ли Maven:
mvn --version
Вы должны увидеть вывод, похожий на следующий:
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.18, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-1036-azure", arch: "amd64", family: "unix"
- Перейдите в директорию проекта:
cd /home/labex/project
- Создайте новый проект Maven с использованием архетипа (шаблона проекта):
mvn archetype:generate \
-DgroupId=com.example.calculator \
-DartifactId=simple-calculator \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=1.4 \
-DinteractiveMode=false
Эта команда создаст новый проект со стандартной структурой директорий.
- Проверьте структуру проекта:
cd simple-calculator
ls -la
Вы должны увидеть вывод, похожий на следующий:
total 24
drwxr-xr-x 4 labex labex 4096 ... .
drwxr-xr-x 6 labex labex 4096 ... ..
-rw-r--r-- 1 labex labex 174 ... .gitignore
-rw-r--r-- 1 labex labex 720 ... pom.xml
drwxr-xr-x 4 labex labex 4096 ... src
Ключевым файлом здесь является pom.xml (Project Object Model), который определяет конфигурацию проекта.
- Проверьте стандартную структуру директорий Maven:
find src -type d
Вы должны увидеть:
src
src/main
src/main/java
src/main/java/com
src/main/java/com/example
src/main/java/com/example/calculator
src/test
src/test/java
src/test/java/com
src/test/java/com/example
src/test/java/com/example/calculator
Это стандартная структура директорий Maven:
src/main/java: Исходный код
src/main/resources: Файлы ресурсов
src/test/java: Тестовый код
src/test/resources: Тестовые ресурсы
- Посмотрим на сгенерированный файл
App.java:
cat src/main/java/com/example/calculator/App.java
Вы должны увидеть простой класс "Hello World":
package com.example.calculator;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
Расширение проекта Maven
Расширим наш проект калькулятора, добавив больше классов:
- Создайте новый файл с именем
Calculator.java в src/main/java/com/example/calculator/:
package com.example.calculator;
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public double divide(int a, int b) {
if (b == 0) {
throw new ArithmeticException("Cannot divide by zero");
}
return (double) a / b;
}
}
- Теперь измените существующий файл
App.java, чтобы использовать наш класс Calculator:
package com.example.calculator;
/**
* Simple Calculator Application
*/
public class App
{
public static void main( String[] args )
{
Calculator calculator = new Calculator();
// Perform some calculations
System.out.println("Addition: 5 + 3 = " + calculator.add(5, 3));
System.out.println("Subtraction: 10 - 4 = " + calculator.subtract(10, 4));
System.out.println("Multiplication: 6 * 7 = " + calculator.multiply(6, 7));
System.out.println("Division: 20 / 4 = " + calculator.divide(20, 4));
System.out.println("Calculator application completed successfully!");
}
}
- Соберите проект с помощью Maven:
mvn compile
Вы должны увидеть вывод, заканчивающийся следующим образом:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
- Упакуйте приложение в файл JAR:
mvn package
Эта команда компилирует ваш код, запускает тесты и упаковывает приложение.
- Запустите упакованное приложение:
java -cp target/simple-calculator-1.0-SNAPSHOT.jar com.example.calculator.App
Вы должны увидеть вывод:
Addition: 5 + 3 = 8
Subtraction: 10 - 4 = 6
Multiplication: 6 * 7 = 42
Division: 20 / 4 = 5.0
Calculator application completed successfully!
Понимание файла POM Maven
Файл Project Object Model (POM) содержит конфигурацию проекта. Откройте файл 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.calculator</groupId>
<artifactId>simple-calculator</artifactId>
<version>1.0-SNAPSHOT</version>
<name>simple-calculator</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<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.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- Build configuration... -->
</project>
Основные элементы файла POM:
groupId: Идентификатор организации или проекта
artifactId: Имя проекта
version: Версия проекта
dependencies: Внешние библиотеки, используемые проектом
build: Конфигурация сборки проекта
Основные команды Maven
Вот некоторые важные команды Maven:
mvn compile: Компилирует исходный код
mvn test: Запускает тесты
mvn package: Создает дистрибутивный пакет (JAR, WAR)
mvn install: Устанавливает пакет в локальный репозиторий
mvn clean: Удаляет артефакты сборки (директорию target)
mvn clean install: Комбинация команд clean и install
Maven значительно упростил управление проектами на Java, предоставляя соглашения, управление зависимостями и автоматизацию сборки. Этот стандартизированный подход помогает разработчикам сосредоточиться на написании кода, а не на управлении структурой проекта.