Сьогодні ми розберемось що таке Maven, та чому Apache Maven все ще є основним інструментом для збірки Java додатків.
Для чого потрібен Maven
В певний період вивчення програмування настає момент, коли потрібно вийти за рамки розробки простого додатку і почати розробляти великі і складні системи. Стандартного функціоналу java вже недостатньо і потрібно використовувати сторонні бібліотеки та фреймворки. В такі моменти і потрібен maven.
Коли не було інструментів накшталт Maven, програмісти просто качали потрібні бібліотеки і підключали їх до свого проекту.
Згодом стало зрозуміло, що робити це не завжди зручно. Та й стежити за версіями бібліотек дуже непросто. Бібліотека, яку ви завантажили та підключили могла отримати оновлення. І для того, щоб оновити її в проекті, доводилося качати нову версію, видаляти стару версію зі свого проекту.
Тоді й прийшли на допомогу інструменти для збирання проектів. Більше не треба було качати та підключати. Достатньо було вказати посилання на бібліотеку, її версію і дозволити інструментам збірки скачати необхідні компоненти.
Перший збирач, котрий я пам’ятаю та котрий навіть користувався Ant. Його все ще можна побачити у старих проектах у деяких компаніях.
Після Ant лідерство очолив Maven. Більше того, він утримує його й донині. Зараз деякі проекти використовують Gradle, але мавен все ще дуже популярний і має попит.
Maven – інструмент для побудови та управління проектами Java. Крім підключення сторонніх бібліотек, він використовується для компіляції, створення jar, створення дистрибутива програми, генерації документації. Так сказано на офіційному сайті Apache Maven.
З чого складається Maven
Maven – інструмент із дуже великим функціоналом. У цій статті я зупинюся тільки на тих моментах, які мені здаються найбільш затребуваними щодо даного інструменту на початкових етапах.
Основою мавен проекту є файл pom.xml (Project Object Model), який розміщується в корені проекту. З розширення цього файлу ви вже могли здогадатися, що його формат XML.
Файл pom.xml повинен мати певне оформлення та структуру. Пропоную вивчити термінологію maven з прикладу типового 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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>untitled3</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>untitled3 Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<jstl.version>1.2</jstl.version>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>8.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>19</source>
<target>19</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Структура pom.xml
Почнемо із самого початку. У самому верху документа вказується що це xml документ, його версія та кодування.
Далі йде тег project. У нього вже і будуть розміщуватися всі інші теги, які ви створюватимете.
Інформація по вашому проекту: groupId (імена та структура пакетів), artifactId (назва проекту), version (версія вашої програми), packaging (як буде зібрано проект):
- jar – як звичайний джава архів,
- war – веб архів, для web додатків
name та description – відповідно ім’я та опис проекту. Вони є не такими важливими і їх можна опускати.
До тег properties можна додавати властивості. Я ще називаю їхні константи. Тут можна визначити властивість та використовувати її далі в документі. Використовувати властивість потрібно за її іменем з таким синтаксисом:
${ім'я_властивості}
Далі йде тег dependencies. У ньому містяться всі залежності проекту: бібліотеки, фреймворки, модулі, інші проекти. Для додавання залежності потрібно скористатися синтаксисом:
<dependency> означає, що це залежність
<groupId>org.projectlombok</groupId> груп айді необхідної залежності. Під час пошуку бібліотеки в Інтернеті ви її знайдете
<artifactId>lombok</artifactId> артифакт Айді. Така сама доля як і груп айді.
<version>1.18.2</version> версія бібліотеки
<scope>provided</scope> зона видимості
</dependency>
На прикладі вище видно, що перші три пункти: groupId, artifactId і version ви зможете отримати при знаходженні бібліотеки.
scope – це область видимості нашої бібліотеки у проекті. Цей параметр дозволяє вказати Мавен коли і для чого використовувати цю залежність. Усього є 6 областей видимості:
- compile – це область видимості за замовчуванням. Залежності з такою зоною видимості будуть використовуватися і при виконанні і при тестуванні і навіть при використанні цієї залежності з інших проектів.
- provided – майже як compile. Єдина її відмінність у тому, що залежність з даною зоною видимості не буде додана в пакет.
- runtime – залежність підключатиметься лише під час виконання коду.
- test – такою зоною видимості відзначаються залежності для тестів. Наприклад, Mockito, JUnit.
- system – залежність, яка буде у середовищі java завжди.
- import – для імпорту залежностей із інших артефактів.
Тег, який призначений для підключення плагінів – build. До нього потрібно додати plugins, а вже в цей тег конкретний плагін. Синтаксис дуже нагадує синтаксис залежностей. Тільки на відміну від тегу, dependency, потрібно використовувати plugin. З приводу плагінів скажу те саме, що говорив вище. Ви знаходитимете їх у мережі залежно від своїх потреб та потреб. І знаходити ви їх вже в потрібному форматі. Плагіни дозволяють розширити функціонал Maven та додати певну автоматизацію до збірки.
Як працює Maven
Спочатку ви створюєте файл pom.xml для вашого проекту. В даному файлі ви визначаєте властивості проекту, залежності, плагіни, репозиторії та інші конфігураційні параметри, які ми розглянули вище.
Maven використовує конфігурацію з файлу pom.xml для зборки вашого проекту. Він автоматично знаходить залежності проекту з репозиторіїв, завантажує їх і компілює ваш код. Результатом збирання є артефакт проекту, такий як JAR-файл або WAR-файл. Який ви згодом можете запустити.
Maven автоматично завантажує необхідні залежності для вашого проекту з централізованих репозиторіїв, таких як Maven Central Repository. Ви вказуєте залежності у файлі pom.xml, і Maven забезпечує їх завантаження і включення до вашого проекту. Розробники бібліотек і фреймворків заздалегідь завантажують свої бібліотеки до центрального репозиторію. Щоб мавен знайшов їх фреймворк і ви могли з ним легко працювати.
Maven надає стандартний життєвий цикл проекту з певними фазами, такими як компіляція, тестування, упакування, розгортання і т. д. Ви можете викликати ці фази з командного рядка або з IDE.
Також Maven дозволяє вам створювати багатомодульні проекти, де кожен модуль може мати свій власний pom.xml. Ви також можете використовувати різні плагіни для розширення функціональності Maven і налаштування власних скриптів збирання.
Початок роботи з Maven
Щоб почати працювати з Maven, потрібно встановити цей інструмент собі на компʼютер. Це дозволить створювати та збирати програми прямо з командного рядка. Останню версію можна завантажити з офіційного сайту, який я вказав вище. Архів можна помістити до будь-якої папки на диску.
Далі потрібно створити змінну M2_HOME у Path, як ви це робили при першій установці java.
При бажанні можна використовувати вбудовану підтримку мавен від intellij idea або eclipse. Тоді вам не потрібно його встановлювати на комп’ютер. Однак в такому разі через командний рядок команди мавен викликати не вийде.
Тепер, щоб створити maven проект, потрібно зайти в свою ide: File->New Project. У вас це може бути Netbeans, Intellij idea, Eclipse.
У вікні знаходимо і обираємо Maven і далі нам скоріше за все, пропонується вибрати архетип. Якщо збираєтеся писати веб-додаток – намагайтеся вибрати архетип для веб-додатку. Якщо ж інше – вибирайте із потреб. Можна без архетипу. Архетип означає, що структура програми (розміщення, кількість папок) буде відповідати типу програми, архетип якого ви виберете. В даній темі для нас це не важливо.

Вказуємо groupId, artifactId, даємо нашому проекту ім’я та розташування і тиснемо Create. Після цього ви побачите, що створилася структура програми і в корені лежить файл pom.xml.
Для того, щоб скомпілювати код, який ви напишете у своєму проекті, можна використовувати команду maven: mvn clean install. Якщо ви використовуєте інструмент від intellij idea, можна просто вибрати вкладку мавен у розділі інструментів, далі перейти до lifesycle – > clean. Після цього вибрати у тій же вкладці install.

Після того, як побачите що збірка успішна, в проекті зʼявиться директорія target. Саме в неї Maven помістив зібраний архів або jar файл.
Далі ви можете використовувати збірку за власними потребами.
Тепер ви знаєте що таке Maven і для чого він використовується. Це не вся інформація про даний інструмент, але для розуміння та базового користування цього має вистачити.

Залишити відповідь