Apache Maven je základným kameňom vývoja Java a najpoužívanejším nástrojom na správu zostavenia pre Javu. Zjednodušený konfiguračný model Maven založený na XML umožňuje vývojárom rýchlo opísať alebo pochopiť obrysy ľubovoľného projektu založeného na prostredí Java, vďaka čomu je začatie a zdieľanie nových projektov hračkou. Maven tiež podporuje testom riadený vývoj, dlhodobú údržbu projektu a jeho deklaratívna konfigurácia a široká škála doplnkov z neho robia obľúbenú voľbu pre CI / CD. Tento článok predstavuje rýchly úvod do Mavenu, vrátane Maven POM a adresárovej štruktúry, a príkazov na zostavenie vášho prvého projektu Maven.
Všimnite si, že posledné vydanie Mavenu od tohto písania je Maven 3.6.3.
Maven vs Ant a Gradle
Maven nie je jediným nástrojom na zostavenie v ekosystéme Java, aj keď je najpopulárnejším. Ant, staršia generácia konfiguračného nástroja založeného na XML, postráda štandardizované postupy Mavenu a správu závislostí od Mavenu, ponúka však flexibilitu, ktorú u Mavenu nenájdete. Gradle je novší nástroj, ktorý beží na vrchole ekosystému Maven (pomocou úložísk spoločnosti Maven), ale podporuje konfiguráciu pomocou DSL založeného na Groovy alebo Kotlin. Všetky tri sú samy o sebe dobrým nástrojom na zostavenie a každý z nich môže byť integrovaný do procesu CI / CD. Dôležitý je výber toho pravého pre vaše potreby a vedieť, ako ho správne používať.
Ako Maven funguje
Rovnako ako mnoho skvelých nástrojov, aj Maven prevezme to, čo bolo kedysi príliš komplikované (konfiguračné peklo), a zjednoduší to na stráviteľné časti. Maven sa skladá z troch komponentov:
- POM: Súbor, ktorý popisuje projekt Maven a jeho závislosti.
- Adresár: Štandardizovaný formát na popis projektu Maven v POM.
- Úložiská: Kde sa ukladá a objavuje softvér tretích strán.
Maven POM: Každý projekt Java, ktorý používa Maven, má v koreňovom adresári súbor POM (projektový objektový model). The pom.xml
popisuje závislosti projektu a povie vám, ako ho vytvoriť. (Závislosti sú softvérom tretích strán vyžadovaným projektom. Niektoré bežné príklady sú JUnit a JDBC. Zoznam všetkých dostupných nástrojov a populárnych závislostí nájdete v centrálnom úložisku Maven.)
Adresár Maven: Adresár Maven implementuje to, čo je známe ako konvencia nad konfiguráciou, elegantné riešenie konfiguračného pekla. Namiesto toho, aby vývojári museli definovať rozloženie a ručne konfigurovať komponenty pre každý nový projekt (ako tomu bolo v prípade makefile
a Ant), Maven zavádza spoločnú štruktúru projektu a ponúka štandardný formát súboru na popis jeho fungovania. Stačí zapojiť svoje požiadavky a Maven zavolá závislosti a nakonfiguruje projekt za vás.
Centralizované úložiská: Nakoniec Maven používa centralizované úložiská na objavovanie a publikovanie balíkov projektov ako závislostí. Keď vo svojom projekte uvediete závislosť, Maven ju objaví v centralizovanom úložisku, stiahne ju do miestneho úložiska a nainštaluje do vášho projektu. To všetko je pre vás ako vývojára väčšinou neviditeľné.
Prístup k závislostiam Maven
Maven štandardne rieši závislosti z centrálneho úložiska Maven. Bežnou alternatívou je JCenter, ktorý má širšiu sadu dostupných balíkov. Organizácie tiež zverejňujú a hostujú interné úložiská, ktoré môžu byť verejné alebo súkromné. Ak chcete získať prístup k úložisku, zadáte jeho adresu URL v Maven POM alebo môžete dať príkazu Maven, aby hľadal v iných úložiskách.
Inštaluje sa Maven
Maven je projekt Java, takže pred jeho inštaláciou musíte mať vo svojom vývojovom prostredí nainštalovaný JDK. (Viac informácií o sťahovaní a inštalácii JDK nájdete v časti „Čo je to JDK? Úvod do vývojovej sady Java“.)
Po dokončení nastavenia vývojového prostredia Java môžete Maven nainštalovať iba v niekoľkých krokoch:
- Stiahnite si najnovšie vydanie Maven (Maven 3.6.3 od tohto písania).
- Extrahujte
apache.maven
súbor .zip na vhodné miesto. - Umiestnite tento súbor na svoju cestu. Napríklad v systéme Unix alebo Linux: export
PATH = $ PATH: / home / maven /
.
Teraz by ste mali mať prístup k mvn
príkaz. Typ mvn -v
aby ste sa uistili, že ste úspešne nainštalovali Maven.
Maven POM
Koreňom každého projektu Maven je pom.xml
spis. Napriek svojej povesti únavnej práce XML v tomto prípade použitia skutočne funguje celkom dobre. Mavenov POM je ľahko čitateľný a odhaľuje veľa z toho, čo sa deje v projekte. (Ak ste pracovali s jazykom JavaScript, pom.xml
je podobný účelu ako Node NPM balíček.json
súbor.)
Zoznam 1 zobrazuje veľmi jednoduchý Maven pom.xml
.
Zoznam 1. Simple Maven POM
4.0.0 com.javaworld what-is-maven 1.0-SNAPSHOT Simple Maven Project jar junit junit 4.12 test
Pochopenie Maven POM
Akonáhle sa dostanete na kĺb, POM nie je záhadný. Na začiatok môžete prehľadať preambulu XML, ktorá iba odkazuje na oficiálnu schému POM. Všimnite si XML začínajúce na modelVersion
však. To hovorí Mavenovi, akú verziu POM má použiť, v tomto prípade Maven POM 4.0.0.
Ďalej máte groupId
, artifactId
a verzia
. Spoločne tieto tri atribúty jedinečne identifikujú každý prostriedok spravovaný Maven v úložisku. Tieto atribúty v hornej časti súboru popisujú váš projekt Maven.
Teraz sa pozrite na závislosti
časť POM, kde popisujeme závislosti projektu. V tomto prípade sme zatiaľ natiahli iba jednu závislosť, JUnit. Všimnite si, že JUnit je tiež opísaný z hľadiska svojho groupId
, artifactId
a verzia
.
Či už popisujete svoj vlastný projekt alebo závislosť od projektu, tieto hodnoty konzistentne informujú Maven, kde nájsť projekt v úložisku Maven a ktorá verzia je k dispozícii na použitie.
Hostenie vášho projektu v úložisku Maven
Majte na pamäti, že POM definuje všetko, čo váš projekt potrebuje na spustenie, ale tiež popisuje váš projekt ako potenciálnu závislosť. Ak budujete projekt, ktorý bude závislý - povedzme, že vytvoríte knižnicu pre ďalšie projekty, ktoré budete môcť použiť - budete ho musieť sprístupniť jedným zo štyroch spôsobov:
- Sprístupnite ho lokálne.
- Publikujte do súkromne spravovaného vzdialeného úložiska.
- Publikujte do cloudového súkromného úložiska.
- Zverejnite ich vo verejnom úložisku, ako je Maven Central.
V prvom prípade vôbec nepoužívate vzdialené úložisko. Namiesto toho ďalší vývojári stiahnu a nainštalujú váš projekt lokálne do svojho repozitára Maven pomocou súboru inštalácia mvn
príkaz.
V druhom prípade použijete hostené úložisko Maven, ktoré na zverejnenie a stiahnutie závislostí používa súkromne riadený server. Potrebujete na to správcu úložiska, napríklad Apache Archiva.
Novšou alternatívou je použitie súkromného vzdialeného úložiska, ale pri správe sa spoliehajte na cloudovú službu, napríklad Cloudsmith. To poskytuje výhodu vzdialene hostených závislostí bez toho, aby ste museli postaviť repo server. Táto služba je samozrejme za poplatok.
Malé percento projektov nakoniec skončí v centrálnom úložisku Maven alebo JCenter, ktoré sú určené pre široko používané verejné balíky. Ak vytvárate závislosť typu open-source, ktorú môžu používať ostatní, na sprístupnenie svojej práce svetu budete potrebovať jedno z týchto centralizovaných úložísk.
- Získajte viac informácií o hostovaní vášho projektu v úložisku Maven a získajte zoznam dostupných úložísk.
- Prečítajte si oficiálnu dokumentáciu Maven o Maven Release Plugin, ktorá sa používa na prípravu a správu softvéru zverejneného v úložisku Maven.
Zostavte si balíček Maven
Ak vytvoríte pom.xml
zo zoznamu 1 a umiestnite ho do adresára, budete môcť proti nemu spustiť príkazy Maven. Maven má množstvo príkazov a ďalšie sú k dispozícii prostredníctvom pluginu, ale na začiatok potrebujete iba niekoľko.
Pri prvom príkaze skúste vykonať balíček mvn
. Aj keď ešte nemáte žiadny zdrojový kód, vykonaním tohto príkazu poviete Mavenovi, aby si stiahol závislosť JUnit. Môžete skontrolovať výstup protokolovania Mavenu a zistiť, či sa závislosť načítala.
Rozsah závislosti
Možno ste si všimli závislosť JUnit v príklade, v ktorom je POM označený ako skúška rozsahu
. Rozsah je dôležitý koncept v riadení závislostí, ktorý vám v podstate umožňuje definovať a obmedziť, ako sa bude každá závislosť volať a používať vo vašom projekte. The test
rozsah zaisťuje, že závislosť je k dispozícii pri spustení testov, ale nie vtedy, keď je aplikácia zabalená na nasadenie.
Ďalším spoločným rozsahom je za predpokladu
, ktorý povie rámcu, že závislosť poskytuje behové prostredie. Toto sa často pozoruje u servletov JARS pri nasadení do servletového kontajnera, pretože kontajner tieto JARS poskytne. V dokumentácii k Apache Maven nájdete kompletný zoznam rozsahov závislostí Maven.
Mavenova adresárová štruktúra
Keď je príkaz hotový, všimnite si, že Maven vytvoril a / cieľ
adresár. Toto je štandardné umiestnenie pre výstup vášho projektu. Závislosti, ktoré ste stiahli, budú umiestnené v priečinku / cieľ
adresár spolu s vašimi skompilovanými artefaktmi aplikácie.
Ďalej chcete pridať súbor Java, ktorý umiestnite do Mavenu src /
adresár. Vytvor /src/main/java/com/javaworld/Hello.java
súbor s obsahom výpisu 2.
Zoznam 2. Hello.java
com.javaworld verejná trieda Hello {public static void main (String [] args) {System.out.println ("Hello, JavaWorld"); }}
The / src
cesta je štandardným miestom pre zdrojové súbory vášho projektu. Väčšina projektov vkladá svoje hlavné súbory / src / main /
, pričom súbory Java prechádzajú do cesty triedy pod / java
. Ďalej, ak chcete zahrnúť aktíva, ktoré sú nie kód, ako napríklad konfiguračné súbory alebo obrázky, ktoré môžete použiť / src / main / resources
. Diela na tejto ceste budú pridané do hlavnej cesty triedy. Testovacie súbory vstúpiť do / src / test / java
.
Na preskúmanie uvádzame niektoré kľúčové časti štruktúry projektu Maven (definované v Maven Standard Directory Structure):
Kľúčové časti Maven Standard Directory Structure
pom.xml | Súbor deskriptorov projektu |
/ src / main / java | Umiestnenie zdrojových súborov |
/ src / main / resources | Umiestnenie zdrojov, ktoré nie sú zdrojmi |
/ src / test / java | Umiestnenie testovacích zdrojových súborov |
/ cieľ | Umiestnenie výstupu zostavenia |
Správa vášho projektu Maven
The balíček mvn
príkaz dá Mavenovi balík projektu. Tento príkaz zadajte, keď ste pripravení zhromaždiť všetky svoje súbory projektu na jednom mieste. Pripomeňme, že v súbore POM pre tento projekt sme nastavili typ balenia na jar
, takže tento príkaz povie Mavenovi, aby zabalil súbory aplikácie do súboru JAR.
Maven ponúka celý rad ďalších možností riadenia spôsobu riadenia JAR, či už ide o tučný alebo tenký JAR, a špecifikáciu spustiteľného súboru mainclass
. V dokumentoch Maven sa dozviete viac o správe súborov v Mavene.
Po združení projektu budete pravdepodobne chcieť vydať a inštalácia mvn
. Tento príkaz tlačí projekt do miestneho úložiska Maven. Akonáhle je v miestnom úložisku, je k dispozícii pre ďalšie projekty Maven vo vašom lokálnom systéme. Je to užitočné pre vývojové scenáre, kde vy alebo váš tím vytvárate súbory JAR závislostí, ktoré ešte nie sú publikované v centrálnom úložisku.
Ďalšie príkazy Maven
Zadajte mvn test
keď ste pripravení vykonať jednotkové testy, ktoré ste definovali v / src / java / test
adresár.
Zadajte mvn zostaviť
keď budete pripravení na kompiláciu súborov triedy projektu. Ak spustíte inštaláciu za horúceho nasadenia, tento príkaz spustí horúci zavádzací program triedy. (Nástroj na rýchle nasadenie - napríklad Spring Boot mvn spring-boot: spustiť
príkaz - bude sledovať zmeny v triedach a kompilácia spôsobí kompiláciu vašich zdrojových súborov a spustená aplikácia bude tieto zmeny odrážať.)
Spustenie nového projektu: Archetypy v Mavene a na jar
A Archetyp Maven je šablóna na spustenie nových projektov na základe rôznych vopred definovaných nastavení. Každý archetyp ponúka vopred zabalené závislosti, napríklad pre projekt Java EE alebo webovú aplikáciu Java. Môžete tiež vytvoriť nový archetyp z existujúceho projektu a potom ho použiť na rýchle vytvorenie nových projektov na základe týchto preddefinovaných rozložení. V dokumentoch Maven sa dozviete viac o archetypoch Apache Maven.
Rámec Spring, ktorý dobre spolupracuje s Mavenom, ponúka ďalšie, prepracované funkcie na potlačenie nových projektov. Napríklad Spring Initializr je nástroj, ktorý vám umožní veľmi rýchlo definovať požadované prvky v novej aplikácii. Initializr nie je sám o sebe archetypom Maven, ale slúži rovnakému účelu na generovanie usporiadania projektu na základe predbežných špecifikácií. V rámci Initializr môžete písať archív typu mvn: generovať
a prehľadajte možnosti, aby ste našli archetyp vhodný pre to, čo staviate.