Включите исполнение JavaScript в браузере, чтобы запустить приложение.
13 ноя 2024

Основы работы на фреймворке Apache Maven в Java

Подробный руководство по работе с фреймворком Apache Maven в Java. Что такое Maven, зачем применяется и в каких языках программирования. Локальные и центральные репозитории Maven. Зависимости, архетипы, плагины Maven. Как установить Maven и создать первый проект — читайте в нашей статье.

Maven нужен для управления проектами. Эта технология основана на POM. Ее используют для работы над проектами, зависимостями и документацией. При работе с Java-фреймворками часто приходится работать с несколькими зависимостями. До появления Maven зависимости или файлы JAR (Java ARchive) приходилось добавлять вручную. Этот инструмент же позволяет автоматически добавлять зависимости в проект и собрать его в итоговый файл. В статье рассмотрим установку Apache Maven, терминологию и жизненный цикл проекта.

Apache Maven — что это

Apache Maven помогает управлять файлами и сборками. Он чаще всего используется в Java-фреймворках. Его разработал Apache Software Foundation. Слово Maven на идише означает «сборщик информации».

Maven автоматически загружает JAR-файлы проектов, библиотеки и другие файлы. В файл pom.xml должна быть включена только информация о версии ПО и типе зависимостей. 

Зачем нужен 

Инструмент используется для: 

  • быстрой настройки проекта и работы с его структурой;
  • упрощения процесса сборки;
  • управления зависимостями и работы с автоматическим обновлением;
  • работы с несколькими проектами одновременно;
  • динамической загрузки необходимых плагинов Java и библиотек из репозитория;
  • получения информации о качестве проекта, исследования списков зависимостей, источников с перекрестными ссылками и отчетом о модульном тестировании.

Для каких языков применяется 

Maven может управлять проектами на Ruby, C# и других языках. Он отвечает за создание проектов, их зависимостей и документирование.

Установка Maven 

Доступна ручная установка или установка с IDE и редактором кода. Первый вариант более сложный, а второй подойдет для новичков.

Ручная установка 

Maven — это Java-проект, поэтому перед его установкой на компьютере должен быть установлен пакет JDK.

После установки среды разработки Java вы можете приступить к установке Maven. 

  1. Загрузите последнюю версию с официального сайта.
  2. Загрузите и сохраните документ apache.maven.zip в подходящем месте.
  3. Добавьте системную переменную MAVEN_HOME, а затем укажите ее в папке.
  4. Добавьте %MAVEN_HOME%\bin в PATH.
  5. Теперь у вас будет доступ к командам mvn. Запустите новую командную строку и введите mvn –version, чтобы убедиться в успешной установке.

Установка при помощи IDE и редакторов кода 

Интегрированная среда разработки (IDE) — это среда программирования, упакованная в виде приложения. Она широко используется разработчиками. Maven — это инструмент командной строки, но многие из его команд могут выполняться с помощью IDE.

Популярные IDE для разработчиков — Eclipse, Netbeans и JetBrains Intellij IDEA. Они успешно интегрируются с Maven projects и расширяют проект. Из проекта IDEA разработчик может легко переключиться на командную строку. 

Чтобы создать новый проект Maven с помощью Eclipse, необходимо выполнить несколько шагов:

  1. В Eclipse выберите «Файл»‎ > «Создать»‎ > «Другое»‎, чтобы перейти к окну мастера создания.
  2. Выберите Maven > Maven Project и нажмите на кнопку «Далее»‎.
  3. В следующем окне есть опция «Создать простой проект»‎. Отметьте эту опцию, если это Java–проект с поддержкой Maven. Для расширенной настройки этот параметр можно не отмечать. Нажмите «Далее»‎.
  4. Необходимо заполнить координаты — groupId, artifactId, версия, упаковка.

Настройка среды Maven 

В терминале (*unix или Mac) или в командной строке (Windows) перейдите в папку, в которой вы хотите создать Java-проект. Введите эту команду:

mvn archetype:generate 
	-DgroupId={project-packaging}
	-DartifactId={project-name}
	-DarchetypeArtifactId={maven-template} 
	-DinteractiveMode=false
java

Это указывает Maven на необходимость создания Java-проекта на основе шаблона. Например,

D:\>mvn archetype:generate -DgroupId=com.mkyong.hashing -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.992 s
[INFO] Finished at: 2018-09-27T17:15:57+08:00
[INFO] ------------------------------------------------------------------------
java

Приведенная выше команда генерирует Java-проект из шаблона maven-archetype-quickstart.

Макет каталога Maven. Автоматически будет создана структура каталогов проекта. Исходный код помещается в папку /src/main/java/, код модульного тестирования — в /src/test/java/.

Файл POM. Просмотрите сгенерированный pom.xml. Он совершенно пустой, только одна зависимость от JUnit.

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mkyong.hashing</groupId>
    <artifactId>java-project3</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>java-project</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
java

POM похож на файл Ant build.xml в. В нем описывается вся информация о проекте, начиная от структуры каталогов, плагинов проекта, зависимостей проекта, как создать этот проект.

Добавьте свойства компилятора, указывающие Maven, как использовать указанную версию JDK для компиляции исходного кода.

<properties>
		<!-- https://maven.apache.org/general.html#encoding-warning -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>	
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
java

Обновите App.java, чтобы он принимал входные данные и хэшировал их с помощью алгоритма SHA-256.

package com.mkyong.hashing;
import org.apache.commons.codec.digest.DigestUtils;
public class App {
   public static void main(String[] args) {
     if (args.length < 1) {
            System.err.println("Please provide an input!");
            System.exit(0);
        }
        System.out.println(sha256hex(args[0]));
    }
    public static String sha256hex(String input) {
        return DigestUtils.sha256Hex(input);
    }

}
java

Репозитории Maven 

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

Репозиторий может быть трех типов:

  • локальный;
  • центральный;
  • удаленный.

Когда требуется выполнить поиск зависимостей, сначала выполняется поиск в локальном хранилище. Затем в центральном хранилище. А потом в удаленном хранилище.

Если зависимости не обнаружены ни в одном из трех хранилищ, пользователь получает сообщение об ошибке. Тогда процесс завершается.

Локальный репозиторий

Это каталог на компьютере, в котором хранятся все компоненты проекта. Когда сборка завершена, фреймворк автоматически загружает все файлы зависимостей в локальный репозиторий.

Локальный репозиторий по умолчанию — каталог user_home/m2. Путь по умолчанию можно изменить в settings.xml.

Центральный репозиторий 

Если зависимости не найдены в локальном репозитории, фреймворк выполняет поиск в центральном репозитории. Затем он загружает зависимости в локальный. Как и в случае с локальным хранилищем, путь к центральному хранилищу может быть изменен в setting.xml.

Удаленный репозиторий

Он похож на центральный репозиторий. Когда фреймворк хочет загрузить зависимость, она отправляется в удаленный репозиторий. Он находится на веб-сервере и широко используется для размещения внутренних проектов компании.

Терминология Maven

POM. Расшифровывается как Project Object Model. Это XML-файл, содержащий информацию о проекте, зависимости, присутствующие в проекте, каталог исходного файла, информацию о подключаемом модуле. Это данные, необходимые для полной сборки проекта. Фреймворк считывает файл pom, чтобы получить эту информацию.

Идентификатор группы. Он отличает наш проект от всех других проектов. GroupId — это часть файла pom. Его называют идентификатором группы проектов.

ArtifactId. Jar-файл, который развертывается в репозитории. artifactId — часть pom-файла. Часто говорят, что это идентификатор и название проекта.

Версия. Указывает версию jar-файла проекта. Версия также является частью pom-файла.

Центральный репозиторий Maven. В нем содержатся файлы jar, библиотеки, плагины и данные конфигурации, необходимые сервису для создания проекта.

Архетипы Maven 

Архетип — это абстракция типа проекта, которая может быть преобразована в конкретный проект. Это шаблон проекта, на основе которого создаются другие проекты.

Основное преимущество использования архетипов в стандартизации разработки проектов заключается в том, что они позволяют разработчикам быстрее запускать свои проекты.

Дескриптор архетипа — это XML-файл с именем archetype-metadata.xml и расположенный в каталоге META-INF/maven jar.

Он используется для описания метаданных архетипов:

<archetype-descriptor
  ...
  name="custom-archetype">

    <requiredProperties>
        <requiredProperty key="foo">
            <defaultValue>bar</defaultValue>
        </requiredProperty>
    </requiredProperties>

    <fileSets>
        <fileSet filtered="true" packaged="true">
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
            </includes>
        </fileSet>
    </fileSets>

    <modules>
        <module name="sub-module"></module>
    </modules>

</archetype-descriptor>
java

Тег required Properties используется для представления свойств при создании проекта. Нам будет предложено указать значения для них, при этом мы можем выбрать значение по умолчанию.

Жизненный цикл проекта Maven 

Maven основан на концепции жизненного цикла сборки. Она определяет порядок выполнения задач. Жизненный цикл по умолчанию состоит из восьми основных этапов: проверки, компиляции, тестирования, упаковки, интеграционного тестирования, верификации, установки и развертывания. Каждая фаза представляет собой определенные этапы процесса сборки и имеет свой собственный набор целей, которые необходимо выполнить.

Зависимости

Зависимость — это внешний объект или библиотека, от которых зависит компиляция, сборка и выполнение проекта. В Java чаще всего зависимость — это JAR. Файл содержит уже готовый код или другие ресурсы, необходимые для проекта. Зависимости определяются в POM (Project Object Model). 

POM же определяет внешние артефакты и версии этих артефактов. Когда вы создадите проект, система сборки автоматически загрузит и включит эти зависимости. Это гарантирует, что ваш проект будет иметь доступ к классам и ресурсам. Зависимости помогают проекту быть модульным, поддерживаемым и многократно используемым. Благодаря им программисты легко могут интегрировать в свои проекты внешние функциональные возможности.

Плагины 

Во фреймворке есть два типа плагинов:

  • Build — выполняется в процессе сборки. Примеры: Clean, Install и Surefire. Они должны быть настроены в разделе сборки POM;
  • Reporting — выполняется во время создания сайта для создания различных отчетов по проекту. Примеры: Javadoc и Checkstyle. Они настраиваются в разделе отчетов POM проекта.