Programovanie

Čo je Maven? Správa zostáv a závislostí pre Javu

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:

  1. Stiahnite si najnovšie vydanie Maven (Maven 3.6.3 od tohto písania).
  2. Extrahujte apache.maven súbor .zip na vhodné miesto.
  3. 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 modelVersionvšak. To hovorí Mavenovi, akú verziu POM má použiť, v tomto prípade Maven POM 4.0.0.

Ďalej máte groupId, artifactIda 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, artifactIda 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:

  1. Sprístupnite ho lokálne.
  2. Publikujte do súkromne spravovaného vzdialeného úložiska.
  3. Publikujte do cloudového súkromného úložiska.
  4. 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.xmlSúbor deskriptorov projektu
/ src / main / javaUmiestnenie zdrojových súborov
/ src / main / resourcesUmiestnenie zdrojov, ktoré nie sú zdrojmi
/ src / test / javaUmiestnenie 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.

Pridávanie závislostí

$config[zx-auto] not found$config[zx-overlay] not found