УДК 00.1028
Иванов Н.Ю. студент
факультет информационных систем и технологий кафедра «Программного обеспечения и управление
в технических системах» Поволжский государственный университет телекоммуникаций и информатики
г. Самара
СБОРКА МУЛЬТИ-МОДУЛЬНЫХ ПРОЕКТОВ С ПОМОЩЬЮ
MAVEN
Аннотация: В статье анализируется использование сборки мульти-модульных проектов с помощью Maven. Приводятся плюсы использования инструмента сборки Maven в мульти-модульных проектах. Также демонстрируется пример использования мульти-модульности Maven.
Ключевые слова: Maven, pom.xml, сборка, автоматизация сборки, мульти-модульность.
Ivanov N.Y. student
Facility of Information Systems and Technologies Department of Software and Management in Technical Systems Volga State University of Telecommunications and Informatics
Samara
BUILD MULTI-MODULE PROJECTS WITH MAVEN
Annotation: The article analyzes the use of the build of multi-modular projects using Maven. The advantages of using the Maven build tool in multimodule projects. Shows example of the use of Maven in multi-module project.
Keywords: Maven, pom.xml, build, build automatization, multi-modularity
Мультимодульный проект Maven построен с помощью POM аггрегатора, который управляет группами подмодулей. В большинстве случаем агрегатор находится в корневом каталоге проекта. Подмодули являются обычными проектами Maven.
Существенным преимуществом такого подхода является уменьшение дублирования конфигурации. Например, есть приложение, которое состоит из нескольких модулей, назовем их внешним модулем и внутренним. В процессе разработки функциональность обоих модулей меняется и в таком случае без специального инструмента сборки придется собирать оба модуля
по отдельности или писать скрипт, который будет компилировать код, запускать тесты и показывать результаты. Через определенное время к проекту добавится еще больше модулей и с текущей моделью сборки им станет сложнее управлять и поддерживать.
Кроме того, в реальном мире проектам могут потребоваться определенные плагины Maven для выполнения различных операций в течении цикла сборки, совместного использования зависимостей и профилей.
Поэтому, используя мультимодульность Maven, модули проекта можно собирать в одну команду, и, емли порядок имеет значение, его можно задать. Кроме того, можно из родительского pom.xml можно поделиться огромным количеством конфигурации с дочерними файлами конфигурации Maven.
Maven поддерживает наследование таким образов, что каждый pom.xml имеет неявный родительский pom.xml, который называется Super POM и находится в бинарных файлах Maven. Следовательно, есть возможность создать собственный pom.xml, который будет родительским в рамках проекта. Затем туда включается вся конфигурация с зависимостями. Подмодули - это обычные проекты Maven, который наследуются от родительского pom.xml. Наследование позволяет делиться конфигурацией родительского pom.xml. Однако, если необходимо собрать весь проект за один раз, то необходимо явно объявить подмодули в родительском pom.xml.
Можно рассмотреть пример сборки на тестовом проекте. Ниже представлен родительский pom.xml проекта, в котором объявлены дочерние модули и тип упаковки._
<modelVersion:>4.. 0. 0</modelVersion>
<groupld>com.sobachken</groupld> <artifactId>learningpro</artifactId:> <version>l.Q.Q-SNAPSHOT</version? <modules>
<module>learningpro-frontend</niodule> <module>learningpro-backend</module:>
AW/VWVWTVVWVWVV
</modules>
<packaging>pom</packaging:> <name>learningpro</name>
Далее приведен пример определения родительского pom.xml в дочерних модулях.
<artifactld:>learningprc-backend</artifactld:> < versions .0.1-SNAPSH0T</versions <name:>learningprQ-backend</nanie:>
_ «J1
™ <packaging>jar|</packaging> <parent>
<artifactId:>learningpro</artifactId:> <groupld>com.sobachkenc/grouplds < versions .0.0-SNAPSHOT</versions <relativePaths../pom.xnTU/relativePaths </parent>
<artifactId>learnirigpro-froiitend</artifactId:> <version:>0.0.1-SNAPSHOTS/version? cnaniesleamingprQ-frontendc/nanies
y.y.y.y.y., Ы I >...■...■...-...■. p
<parent>
<artifactId?learringpro</artifactId> <groupld>com.scbachkeri</groupld:> <versionsl.С.C-SNAPSHOT</versions <relativePaths. ./pom. xnil</relativePaths </parert>
После выполнения команды clean install на родительском pom.xml можно увидеть следующее._
[INFO] Reactor Build Order: [INFO]
[INFO] learningpro
[INFO] learningpro-frontend
[INFO] learningpro-backend [INFO]
[INFO] --------------------------------------------------------------------
[INFO] Building learningpro 1.0.0-SNAPSHOT
[INFO] --------------------------------------------------------------------
[INFO]
[INFO] — maven-clean-plugin:3.1.0¡clean (default-clean) 5) learningpro — [INFO]
Использованные источники:
1. Документация Maven [Электронный ресурс] URL: https://maven.apache.org/guides/index.html