Udemy
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
Turn what you know into an opportunity and reach millions around the world.
Learn More
Your cart is empty.
Keep shopping
Apache Maven
Highest Rated
Rating: 4.8 out of 5(163 ratings)
650 students

Apache Maven

Nexus, Plugins
Last updated 3/2022
Russian

What you'll learn

  • Apache Maven

Course content

1 section30 lectures4h 35m total length
  • 1. Введение8:02

    На первом занятии нашего нового курса мы узнаем, что такое Apache Maven. Для чего он используется и заглянем немного в прошлое, чтобы понять, как раньше разработчики обходились без этого приложения.

    00:00 - Введение
    00:34 - Языки команд batch и shell
    00:53 - Структура команд
    03:10 - batch и shell скрипты
    04:41 - Apache Ant и Make
    06:16 - Apache Maven
    07:07 - Gradle

  • 2. Установка программного обеспечения5:43

    Для прохождения курса нам необходимо будет установить программное обеспечение. Мы будем использовать Java 15, среду разработки IntelliJ IDEA и конечно же сам Apache Maven. После успешной установки всего ПО мы должны иметь возможность в командой строке проверить версии Java и Apache Maven.

    Ссылка на скачивание Java 15: https://www.oracle.com/java/technologies/javase-jdk15-downloads.html
    Ссылка на скачивание среды разработки IntelliJ IDEA: https://www.jetbrains.com/idea/download
    Ссылка на скачивание Apache Maven (не обязательно, ибо идет вместе с установкой IntelliJ IDEA): https://maven.apache.org/download.cgi
    00:00 - Введение
    00:15 - Установка Java 15
    01:36 - Переменная среды PATH (Unix)
    03:13 - Переменная среды PATH (Windows)
    03:34 - Установка IntelliJ IDEA
    04:06 - Установка Apache Maven

  • 3. Plugins. Mojo7:38

    Plugins - это основа Maven, его ядро. Именно с plugins мы будем всегда работать во время вызова соответствующих команд mvn в командной строке. В свою очередь они состоят из множества целей (goals), которые представляют из себя обычные Java классы - Mojo. На видео более подробно разберемся со всеми новыми понятиями и определениями.

    Ссылка на исходный код Apache Maven: https://maven.apache.org/scm.html

    00:00 - Введение
    00:15 - Plugins и goals
    01:35 - Исходный код Apache Maven
    03:02 - compiler plugin
    05:57 - Вызов первой цели compiler:help
    07:11 - Резюме

  • 4. JVM arguments8:15

    На предыдущем занятии мы видели, как принято передавать параметры во время вызова наших целей у Maven на примере compiler:help. Но на самом деле это характерно не для Maven плагинов, а для любых Java приложений. Другими словами говоря, во время запуска Java приложения через консоль мы можем передать параметры несколькими различными способами, что и будет объяснено в видео, потому что это довольно часто встречаемый функционал и его необходимо знать.

    00:00 - Введение
    01:33 - JVM options -D, -X, -XX
    03:48 - Program arguments
    05:15 - Класс System
    06:39 - Environment variables
    07:04 - Резюме

  • 5. Archetype plugin9:44

    Первый вспомогательный Maven плагин, с которым мы познакомимся, будет Archetype plugin. Он позволяет создавать проекты соблюдая Maven структуру. Причем различных архетипов на различные типы и конфигурации проектов есть просто в огромном количестве (несколько тысяч). Таким образом вы можете создать для себя как обычный практически пустой Maven проект, так и веб проект или даже проект с настроенными фреймворками, такими как Hibernate или Spring.

    00:00 - Введение
    00:21 - Исходный код archetype plugin
    00:51 - archetype plugin goals
    01:59 - quickstart archetype
    03:26 - Maven project naming convention
    05:10 - Project version convention
    06:56 - Maven projects structure
    09:14 - Резюме

  • 6. POM. Project Object Model10:54

    POM (Project Object Model) - это основной конфигурационный xml файл, который используется во всех Maven проектах. На видео разобьем его на 4 основных секции, чтобы лучше понимать довольно непростую и объемную структуру xml файлов, и разберемся с каждой из них.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-6

    00:00 - Введение
    00:23 - 1. General Project Information
    00:49 - 2. Build Environment
    01:27 - 3. POM Relationships
    02:25 - 4. Build settings
    03:34 - Пример POM нашего проекта
    09:08 - Директория target

  • 7. Super POM7:46

    В Apache Maven есть механизм наследования подобный наследованию в языке программирования Java. И базовый POM xml, от которого наследуются по умолчанию все другие POM, называется Super POM, про который мы и будем разговаривать в видео. Также на основании этого мы придем к новому термину - effective pom, который подробно разберем.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-7
    Ссылка на документацию Super POM версии 3.6.3: https://maven.apache.org/ref/3.6.3/maven-model-builder/super-pom.html

    00:00 - Введение
    00:47 - Структура Super POM
    04:24 - Plugins по умолчанию
    05:13 - Goal help:effective-pom

  • 8. Dependency management9:00

    Одна из самых главных составляющих Apache Maven - это управление зависимостями, когда с помощью тега dependency мы можем подключить любую jar, просто указав ее уникальный идентификатор в maven репозитории, т.е. groupId:artifactId:version. Этот уникальный ключ по-другому еще называется Maven Coordinates. Также узнаем, как и где Apache Maven хранит все зависимости и что такое локальный репозиторий (Local repository).

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-8

    00:00 - Введение
    00:25 - Tag dependencies
    03:02 - Local repository
    05:30 - Путь зависимости в local repository
    07:41 - Импорт зависимостей в IntelliJ IDEA
    08:56 - Резюме

  • 9. Dependency scope7:34

    В тэге dependency есть возможность указывать другие теги, и один из основных - это тег scope, который имеет большое значение на использование jar в проекте. Более подробно остановимся на всех 5 различных видах scope, чтобы разобраться в каждом из них. Для анализа всех зависимостей восопльзуемся еще одним специальным плагином dependency

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-9

    00:00 - Введение
    00:57 - Tag scope
    01:26 - Compile scope
    01:59 - Provided scope
    02:47 - Runtime scope
    04:14 - System scope
    04:39 - Test scope
    05:19 - Dependency plugin

  • 10. Transitive dependencies9:26

    В механизме подключения и использования зависимостей есть один не очень приятный нюанс - транзитивные зависимости. Они могут доставить довольно много хлопот, если не знать, как они работают, как их Maven выкачивает и как решать конфликты зависимостей. На видео подробно остановимся и разберем все перечисленные аспекты.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-10

    00:00 - Введение
    00:56 - Определение транзитивных зависимостей
    02:08 - Конфликты версий зависимостей
    05:21 - Tag exclusions
    06:41 - Tag optional
    08:05 - Интеграция Maven и IntelliJ IDEA

  • 11. Project Lifecycles. Clean Lifecycle9:18

    Жизненный цикл проекта - это основной аспект Apache Maven, который полностью позволяет управлять жизнедеятельностью нашего приложения, начиная от написания исходных кодов и заканчивая разворачиванием приложения на веб сервере. Их существует всего 3: Clean, Default (Build) и Site. На видео подробно разберем каждый из них.

    00:00 - Введение
    00:31 - Жизненные циклы в Maven
    01:30 - Clean lifecycle
    01:52 - Default (Build) lifecycle
    04:25 - Site lifecycle
    05:00 - Исходники compiler plugin
    05:59 - Основные фазы и их цели в Maven
    06:54 - Запуск Clean lifecycle из консоли
    08:02 - Запуск Clean lifecycle из IntelliJ IDEA

  • 12. Default Lifecycle. Validate and Compile phases10:44

    С этого видео начнем разбираться с самым главным жизненным циклом проекта - Default. И первые основные фазы его - это Validate и Compile. Разберем подробно каждую из них, а также все промежуточные фазы между ними, и какие цели плагинов срабатывают по умолчанию для этих фаз.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-12

    00:00 - Введение
    00:43 - Фаза Validate
    01:30 - Фаза Compile и порядок вызова фаз
    03:59 - Compile and resources plugin goals
    07:17 - Переопределение Compiler plugin

  • 13. Default Lifecycle. Test phase. Surefire plugin12:05

    Продолжаем разбираться с Default жизненным циклом в Apache Maven и на очереди у нас следующая основная фаза, которая подготавливает тестовые классы, тестовые ресурсы и запускает тесты - это Test. Подробно разберем ее на видео.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-13

    00:00 - Введение
    00:47 - Фаза Test и промежуточные фазы
    02:30 - TestResources plugin goal
    04:13 - TestCompile plugin goal
    05:55 - Surefire plugin. Test goal
    07:15 - Skip tests
    08:22 - Includes tests

  • 14. Default Lifecycle. Package phase9:37

    В третьем видео по Default жизненному циклу проекта разберем очень важную фазу - package. Дело в том, что именно packaging type влияет на перечень plugin goals, которые вызываются в зависимости от запущенной фазы. Более подробно поговорим об этом в видео, а также уделим внимание тому, что итоговая jar не содержит внутри себя зависимостей, и как сделать так, чтобы она была executable.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-14

    00:00 - Введение
    01:50 - Фаза package и промежуточные фазы
    03:32 - Packaging types и соответствующие им плагины
    07:50 - Исходный код всех packaging types
    08:40 - Not executable jar by default

  • 15. Packaging type war9:30

    Так как большинство приложений в наше время - это веб приложения, то нам нужно разобраться с таким packaging type как war. Мы с ним уже сталкивался на предыдущем курсе по HTTP. Servlets, и в создании такого типа артефакта нам помогала IntelIiJ Idea. Теперь же посмотрим как выглядит Maven структура веб приложения.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-15

    00:00 - Введение
    00:50 - Создание веб приложения через архетип
    03:49 - Создание веб приложения из существующего
    05:42 - Создание актефактов в настройках проекта
    08:39 - Tag finalName

  • 16. Привязка plugin goal к phase11:02

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

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-16

    00:00 - Введение
    00:18 - copy-resources goal
    01:46 - Tag executions
    02:51 - Исходный код maven-resources-plugin
    04:44 - Maven properties и expression language
    08:15 - Привязка цели к фазе
    09:19 - Вызов цели из maven-compiler-plugin

  • 17. Default Lifecycle. Verify phase. Failsafe plugin7:25

    Следующая основная фаза в default project lifecycle - это verify, которая используется для запуска и верификации уже интеграционных тестов. Для этого нам понадобится уже другой плагин - failsafe plugin, которые и нужен специально для запуска интеграционных тестов, в отличие от уже пройденного нами на фазе test - surefire plugin, который нужен исключительно для unit тестов. На видео подробно разберемся как подключить этот плагин и его нюансы.

    Ссылка на failsafe plugin: https://maven.apache.org/surefire/maven-failsafe-plugin/usage.html
    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-17

    00:00 - Введение
    00:14 - verify phase
    01:21 - failsafe plugin. Теория
    03:34 - failsafe plugin. Практика
    06:50 - test reports

  • 18. Default Lifecycle. Install phase8:15

    Следующая фаза из default lifecycle - это install phase, которая позволяет сохранять собранные артефакты на фазе package в локальных репозиторий, который в свою очередь по умолчанию у нас находится в ~/.m2/repository. На видео более подробно разберем все нюансы этой фазы.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-18

    00:00 - Введение
    00:41 - install phase. Теория
    02:22 - install phase. Практика
    03:53 - Как найти артефакты в локальном репозитории
    04:43 - Собранный артефакт как зависимость
    06:23 - Good practice to override default plugins

  • 19. Default Lifecycle. Deploy phase. Nexus13:48

    Заключительная фаза default lifecycle - это deploy phase, которая занимается передачей артефактов из локального репозитория (~/.m2/repository) в указанный удаленный репозиторий. По умолчанию, никаких настроек удаленного репозитория не предоставляется, что и логично. Поэтому запуск этой фазы не приведет к успешному завершению. Следовательно, на занятии поднимем свой удаленный репозиторий Nexus и попробуем настроить наш проект так, чтобы мы смогли на фазе deploy скопировать туда свой артефакты из локального репозитория.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-19
    Ссылка на nexus docker image: https://hub.docker.com/r/sonatype/nexus3

    00:00 - Введение
    00:49 - deploy phase. Теория
    03:13 - Nexus
    05:00 - Tag distributionManagement
    07:12 - Файл settings.xml
    09:36 - Настройка удаленного сервера в settings.xml
    10:46 - Тестирование deploy phase и Nexus
    12:59 - Резюме

  • 20. Site Lifecycle. Jacoco plugin8:21

    На видео разберем последний третий жизненный цикл в Maven проектах - это Site Lifecycle, который содержит всего лишь одну основную фазу Site и занимается тем, что генерирует отчеты по нашему проекту. Также познакомимся с таким хорошим и активно используемом в реальных проектах плагине - Jacoco, который нужен для генерации статистики (отчетов) по покрытию тестами. Более того, этот плагин позволяет даже фейлить билд, если процент покрытия тестами недостаточный.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-20
    Ссылка на документацию по Jacoco plugin: https://www.eclemma.org/jacoco/trunk/doc/maven.html

    00:00 - Введение
    00:14 - Site Lifecycle
    01:15 - Настройка site plugin
    02:33 - Структура сгенерированного отчета
    03:40 - Настройка Jacoco plugin
    07:25 - Jacoco отчет о покрытии тестами

  • 21. Multimodule project11:32

    Реальные приложения намного больше, чем мы практикуем на курсах, поэтому принято разбивать их на более мелкие кусочки, чтобы было легче поддерживать их, изменять и разворачивать на production. Следовательно, в Apache Maven есть специальная возможность для таких нужд - это модули. На видео подробно поговорим про Multimodule project.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-21

    00:00 - Введение
    00:41 - Наследование в multimodule projects
    03:18 - Создание database модуля
    05:59 - Создание service модуля
    07:47 - Запуск жизненного цикла указанного модуля
    08:36 - Создание web модуля
    10:58 - Parent модуль

  • 22. PluginManagement and DependencyManagement14:07

    Так как multimodule проекты основаны целиком и полностью на наследовании, то мы можем воспользоваться этим для своих нужд. И в данном видео мы разберем таким специальные секции в parent pom.xml как PluginManagement и DependencyManagement. Также немного затронем тему свойств в Apache Maven (properties), с которыми более подробно познакомимся в отдельном видео этого курса, и зависимости между модулями в одном multimodule проекте.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-22

    00:00 - Введение
    00:34 - Переопределение любых элементов
    01:19 - Секция dependencyManagement
    05:09 - Секция pluginManagement
    07:52 - Properties для групп зависимостей
    09:08 - Зависимость между модулями
    13:48 - Parent pom как отдельный модуль

  • 23. Properties. Resource Filtering7:32

    На видео вернемся к свойствам в Apache Maven и более подробно разберем все 5 различных вариантов их. Более того, поговорим про такую интересную возможность как Resource Filtering, которая помогает нам подставлять через expression language различные свойства из Apache Maven в ресурсных файлах.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-23

    00:00 - Введение
    00:24 - 5 вариантов указания Properties
    02:50 - Resource Filtering
    04:45 - Tags resources и testResources

  • 24. Build Profiles9:46

    Профайлы - это еще одна прекрасная возможность в Apache Maven, которая позволяет нам видоизменять effective pom в зависимости от каких-то условий или, другими словами говоря, активации этих профайлов. На занятии поговорим более подробно, как именно можно запускать и активировать профайлы, а также как можно посмотреть текущие активированные профайлы в проекте через специальную цель help:active-profiles.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-24

    00:00 - Введение
    00:12 - Tag profiles
    03:20 - Запуск профайлов
    04:08 - Debug mode -X
    05:19 - Gole help:active-profiles
    06:00 - Tag activation

  • 25. Executable jar9:36

    Maven package phase собирает наши модули в соответствующие packaging type артефакты. Мы их можем использовать не только как зависимости в других модулях и проектах, но и для того, чтобы запустить как обычные Java приложения. На видео разберем, как это сделать правильно и для чего нам необходим MANIFEST.MF файл.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-25

    00:00 - Введение
    00:28 - Запуск класса с методом main
    02:50 - Запуск jar файла
    04:05 - Файл META-INF/MANIFEST.MF
    06:08 - Переопределение maven-jar-plugin
    08:22 - Использование классов из зависимостей

  • 26. Executable jar with dependencies10:23

    К сожалению, для добавления jar файлов всех зависимостей (и транзитивных тоже) нам недостаточно стандартного подхода, что мы делали на предыдущем занятии. Поэтому узнаем два варианта решения этой проблемы: 1 - через скачивание всех зависимостей в отдельную директорию и указание пути к ней (как это сделано в Tomcat или Maven), 2 - распаковка всех зависимостей и подкладывание всех классов из них в нашу jar. На видео попрактикуемся с обоими вариантами.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-26
    Ссылка на maven-assembly-plugin: http://maven.apache.org/plugins/maven-assembly-plugin/usage.html

    00:00 - Введение
    00:31 - Class-Path в файле MANIFEST.MF
    01:47 - maven-dependency-plugin
    05:36 - maven-assembly-plugin
    10:02 - Резюме

  • 27. Release plugin13:27

    На любом проекте рано или поздно необходимо делать релизные версии. Мы уже затрагивали тему именования версий в Maven проектах, и почему по умолчанию мы видим постфикс SNAPSHOT. На видео поговорим об этом более подробно и подключим maven-release-plugin, который поможет нам сделать релиз нашего проекта.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-27

    00:00 - Введение
    00:57 - Устройство release plugin
    02:52 - Подключение release plugin
    04:39 - Секция scm
    06:55 - release:prepare goal
    10:51 - release:perform goal

  • 28. Создание собственного plugin9:53

    У нас есть еще один packaging type с названием maven-plugin, который как раз-таки и используется для написания собственных плагинов. Для этого нам понадобится подключить еще парочку зависимостей с scope provided, потому что Maven содержит уже эти зависимости и нам все необходимое предоставит. На видео создадим собственный плагин.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-28

    00:00 - Введение
    00:40 - Создание модуля hello-plugin
    02:51 - Класс HelloMojo
    03:52 - Подключение и использование hello-plugin
    06:17 - Параметры в hello-plugin
    09:37 - Резюме

  • 29. Заключение. Путь развития5:11

    В заключительном видео курса по Apache Maven по традиции поговорим про дальнейшим путь развития нас как разработчиков. Также затронем тему maven wrapper, который является очень удобным инструментов и часто используется в реальных приложениях.

    Ссылка на код с занятия: https://github.com/dmdev2020/apache-maven-starter/tree/lesson-29

    00:00 - Введение
    00:26 - Книга "Maven. The Definitive Guide"
    00:47 - Maven wrapper
    03:58 - Groovy и Gradle

  • Домашнее задание0:13

Requirements

  • Java. Желательно HTTP, Servlets

Description

Курс Apache Maven содержит информацию про инструмент автоматизированной сборки проектов, который полностью отвечает за жизненный цикл Java приложений. Зайдем в исходный код Apache Maven, чтобы понять основное ядро его, которым на самом деле являются плагины и Mojo (Maven plain Old Java Object). Поэтому на практике разберем основные плагины, которые чаще всего используются в реальных проектах:
- Surefire для запуска unit тестов
- Failsafe для запуска integration тестов
- Jacoco для генерации документации о пройденных тестах и их покрытия исходного кода
- Release для создания релизных версий проектов и пуша их в удаленный репозиторий (github)
- Assembly для упаковки вашего приложения в архивы (jar)
- Dependency для скачивания всех зависимостей (и транзитивных тоже) в отдельные директории (так поступают многие другие Java приложения, такие как Apache Tomcat, Apache Maven, Gradle и др.)
Более того, мы сами попробуем написать свой собственный плагин и задеплоим его в репозиторий, чтобы предоставить доступ к нему из других приложений.
Узнаем в какие типы артефактов можно собирать наши проекты и конечно же более подробно остановимся на war (для упаковки веб архивов) и jar. А также узнаем, как собирать jar таким образом, чтобы можно было запустить наше приложение через командную строку, причем разберем несколько общепринятых вариантов.
Разберем многомодульные проекты, углубимся в возможности наследования конфигурационных файлов POM и многое другое.
По окончании курса вы уверенно будете владеть Apache Maven и хорошо разбираться во всех его аспектах.

Who this course is for:

  • Разработчики Java, которые хотят понять, как устроен Apache Maven