Programiranje

Kaj je Maven? Zgradba in upravljanje odvisnosti za Javo

Apache Maven je temelj razvoja Jave in najpogosteje uporabljeno orodje za upravljanje zgradb za Javo. Mavenov poenostavljen konfiguracijski model, ki temelji na XML, razvijalcem omogoča hitro opisovanje ali razumevanje obrisov katerega koli projekta, ki temelji na Javi, zaradi česar je zagon in skupno raba novih projektov hiter. Maven podpira tudi testno voden razvoj, dolgoročno vzdrževanje projektov, njegova deklarativna konfiguracija in širok nabor vtičnikov pa je priljubljena možnost za CI / CD. Ta članek je kratek uvod v Maven, vključno z Maven POM in strukturo imenikov ter ukazi za izdelavo vašega prvega projekta Maven.

Upoštevajte, da je najnovejša izdaja sistema Maven v tem času Maven 3.6.3.

Maven vs Ant in Gradle

Maven ni edino orodje za gradnjo v ekosistemu Java, čeprav je najbolj priljubljeno. Ant, starejša generacija orodja za konfiguracijo na osnovi XML, nima Mavenovih standardiziranih praks, ki temeljijo na konvencijah, in upravljanja odvisnosti, vendar ponuja prilagodljivost, ki je pri Mavenu ne boste našli. Gradle je novejše orodje, ki deluje na vrhu ekosistema Maven (z uporabo Mavenovih skladišč), podpira pa uporabo DSL-ja na osnovi Groovy ali Kotlin za konfiguracijo. Vsi trije so samo po sebi dobro orodje za gradnjo in jih je mogoče vključiti v postopek CI / CD. Pomembno je izbrati pravega za svoje potrebe in vedeti, kako ga pravilno uporabiti.

Kako deluje Maven

Tako kot številna odlična orodja tudi Maven vzame tisto, kar je bilo nekoč preveč zapleteno (konfiguracijski pekel), in poenostavi na prebavljive dele. Maven je sestavljen iz treh komponent:

  • POM: Datoteka, ki opisuje projekt Maven in njegove odvisnosti.
  • Imenik: Standardizirana oblika za opis projekta Maven v POM.
  • Repozitoriji: kjer je shranjena in odkrita programska oprema drugih proizvajalcev.

Maven POM: Vsak projekt Java, ki uporablja Maven, ima v korenskem imeniku datoteko POM (objektni model projekta). The pom.xml opisuje odvisnosti projekta in vam pove, kako ga zgraditi. (Odvisnosti so programska oprema drugih proizvajalcev, ki jo zahteva projekt. Nekateri pogosti primeri so JUnit in JDBC. Seznam vseh razpoložljivih orodij in priljubljenih odvisnosti si oglejte v centralnem skladišču Maven.)

Imenik Maven: Imenik Maven izvaja tisto, kar je znano kot dogovor o konfiguraciji, elegantna rešitev za konfiguracijo pekla. Namesto da od razvijalcev zahtevajo, da določijo postavitev in ročno konfigurirajo komponente za vsak nov projekt (kot je bilo v primeru makefile in Ant), Maven vzpostavi skupno strukturo projektov in ponuja standardni format datoteke, ki opisuje, kako deluje. Samo priključite svoje zahteve, Maven pa prikliče odvisnosti in konfigurira projekt namesto vas.

Centralizirani repozitoriji: Končno Maven uporablja centralizirane repozitorije za odkrivanje in objavljanje paketov projektov kot odvisnosti. Ko se v projektu sklicujete na odvisnost, jo bo Maven odkril v centraliziranem repozitoriju, jo prenesel v lokalno repozitorij in jo namestil v vaš projekt. Največkrat je vse to za vas kot razvijalca nevidno.

Dostop do odvisnosti Maven

Maven privzeto razreši odvisnosti iz centralnega repozitorija Maven. Pogosta alternativa je JCenter, ki ima širši nabor paketov. Organizacije objavljajo in gostijo tudi notranje repozitorije, ki so lahko javni ali zasebni. Če želite dostopati do skladišča, v Maven POM določite njegov URL ali pa Mavenu naročite, naj pogleda v druge repozitorije.

Namestitev Maven

Maven je projekt Java, zato morate pred namestitvijo namestiti JDK v svoje razvojno okolje. (Glejte "Kaj je JDK? Uvod v Java Development Kit" za več informacij o prenosu in namestitvi JDK.)

Ko nastavite razvojno okolje Java, lahko Maven namestite v nekaj korakih:

  1. Prenesite najnovejšo izdajo Maven (Maven 3.6.3 od tega pisanja).
  2. Izvlecite apache.maven .zip datoteko na priročno mesto.
  3. Datoteko postavite na svojo pot. Na primer v sistemu Unix ali Linux: izvoz PAT = $ PATH: / home / maven /.

Zdaj bi morali imeti dostop do mvn ukaz. Tip mvn -v da se prepričate, da ste uspešno namestili Maven.

Maven POM

Koren vsakega projekta Maven je pom.xml mapa. Kljub temu, da slovi kot dolgočasen, XML v tem primeru dejansko deluje zelo dobro. Mavenov POM je enostavno prebrati in razkrije veliko dogajanja v projektu. (Če ste delali z JavaScriptom, se pom.xml je po namenu podoben Node NPM package.json mapa.)

Seznam 1 prikazuje zelo preprost Maven pom.xml.

Seznam 1. Preprost Maven POM

   4.0.0 com.javaworld what-is-maven 1.0-SNAPSHOT Simple Maven Project jar junit junit 4.12 test 

Razumevanje Maven POM

Ko se enkrat znajdeš, POM ni skrivnosten. Za začetek lahko preletite preambulo XML, ki se samo sklicuje na uradno shemo POM. Opazite XML, začenši z modelVersion, vendar. To Mavenu pove, katero različico POM naj uporabi, v tem primeru Maven POM 4.0.0.

Nato ste groupId, artefaktId, in različico. Ti trije atributi skupaj enolično identificirajo vsak vir, ki ga upravlja Maven v repozitoriju. Ti atributi na vrhu datoteke opisujejo vaš projekt Maven.

Zdaj pa si oglejte odvisnosti poglavju POM, kjer opisujemo odvisnosti projekta. V tem primeru smo doslej potegnili samo eno odvisnost, JUnit. Upoštevajte, da je JUnit opisan tudi z vidika groupId, artefaktId, in različico.

Ne glede na to, ali opisujete svoj projekt ali odvisnost od projekta, te vrednosti Mavenu dosledno povedo, kje najti projekt v repozitoriju Maven in katera različica je na voljo za uporabo.

Gostovanje vašega projekta v Mavenovem skladišču

Upoštevajte, da POM definira vse, kar mora vaš projekt zagnati, vendar pa projekt opisuje tudi kot potencialno odvisnost. Če gradite projekt, ki bo odvisen - recimo, ustvarjate knjižnico za druge projekte - jo boste morali dati na voljo na enega od štirih načinov:

  1. Naj bo na voljo lokalno.
  2. Objavi v zasebnem upravljanem oddaljenem repozitoriju.
  3. Objavi v zasebnem repozitoriju v oblaku.
  4. Objavite v javnem repozitoriju, kot je Maven Central.

V prvem primeru oddaljenega repozitorija sploh ne uporabljate. Namesto tega bodo drugi razvijalci prenesli in namestili vaš projekt lokalno v svoj repozitorij Maven s pomočjo namestitev mvn ukaz.

V drugem primeru uporabljate gostovano shrambo Maven in uporabljate zasebno nadzorovan strežnik za objavo in prenos odvisnosti. Za to potrebujete upravitelja repozitorija, kot je Apache Archiva.

Novejša alternativa je uporaba zasebnega oddaljenega repoja, vendar se za upravljanje zanaša na storitev v oblaku, na primer Cloudsmith. To daje prednost oddaljenim gostovanim odvisnostim, ne da bi bilo treba postaviti repo strežnik. Ta storitev je seveda plačljiva.

Nazadnje bo majhen odstotek projektov končal v centralnem skladišču Maven ali JCenter, ki je namenjen široko uporabljenim javnim paketom. Če ustvarjate odprtokodno odvisnost, ki jo bodo uporabljali drugi, boste potrebovali enega od teh centraliziranih skladišč, da bo vaše delo na voljo svetu.

  • Preberite več o gostovanju vašega projekta v Mavenovem skladišču in dobite seznam razpoložljivih skladišč.
  • Oglejte si uradno dokumentacijo Maven o vtičniku za izdajo Maven, ki se uporablja za pripravo in upravljanje programske opreme, objavljene v repozitoriju Maven.

Sestavite paket Maven

Če ustvarite pom.xml iz seznama 1 in ga shranite v imenik, proti njemu boste lahko izvajali ukaze Maven. Maven ima veliko ukazov, več jih je na voljo prek vtičnika, vendar za začetek morate vedeti le nekaj.

Za prvi ukaz poskusite izvršiti mvn paket. Čeprav še nimate nobene izvorne kode, izvajanje tega ukaza Mavenu pove, da prenese odvisnost JUnit. V Mavenovem izpisu dnevnika lahko preverite, ali je odvisnost naložena.

Obseg odvisnosti

Morda ste opazili odvisnost JUnit v primeru, da je POM označen kot preskus obsega. Obseg je pomemben koncept pri upravljanju odvisnosti, ki vam v bistvu omogoča, da določite in omejite, kako bo vsaka odvisnost poklicana in uporabljena v vašem projektu. The preskus obseg zagotavlja, da je odvisnost na voljo med izvajanjem testov, ne pa tudi, ko je aplikacija zapakirana za uvajanje.

Drug pogost obseg je pod pogojem, ki okvirju pove, da odvisnost zagotavlja izvajalno okolje. To se pogosto opazi pri strežniškem strežniku JARS pri namestitvi v vsebnik strežniškega programčka, saj bo vsebnik zagotovil te JARS. Za celoten seznam obsegov odvisnosti Maven glejte dokumentacijo Apache Maven.

Mavenova struktura imenika

Ko je ukaz končan, opazite, da je Maven ustvaril datoteko / tarča imenik. To je običajno mesto za rezultate vašega projekta. Odvisnosti, ki ste jih prenesli, bodo v / tarča imenik, skupaj z vašimi sestavljenimi artefakti aplikacije.

Nato želite dodati datoteko Java, ki jo boste postavili v Maven src / imenik. Ustvariti /src/main/java/com/javaworld/Hello.java datoteko z vsebino seznama 2.

Seznam 2. Hello.java

 com.javaworld javni razred Pozdrav {public static void main (String [] args) {System.out.println ("Hello, JavaWorld"); }} 

The / src pot je običajno mesto za izvorne datoteke vašega projekta. Večina projektov da svoje glavne datoteke / src / glavna /, z datotekami Java, ki gredo v učno pot pod / java. Če želite vključiti tudi sredstva, ki so ne kodo, kot so konfiguracijske datoteke ali slike, ki jih lahko uporabite / src / main / resources. Sredstva na tej poti bodo dodana v glavno pot razreda. Preizkusne datoteke gredo v / src / test / java.

Za pregled je tu nekaj ključnih delov strukture projekta Maven (kot je opredeljena s standardno strukturo imenikov Maven):

Ključni deli strukture Maven Standard Directory

pom.xmlDatoteka deskriptorja projekta
/ src / main / javaLokacija izvornih datotek
/ src / main / resourcesLokacija nevirskega premoženja
/ src / test / javaLokacija testnih izvornih datotek
/ tarčaLokacija izhodnega gradiva

Upravljanje vašega projekta Maven

The mvn paket ukaz Mavenu poveže projekt. Ta ukaz izdajte, ko ste pripravljeni zbrati vse svoje projektne datoteke na enem mestu. Spomnimo se, da smo v datoteki POM za ta projekt nastavili vrsto embalaže na kozarec, zato ta ukaz Mavenu pove, naj datoteke aplikacije zapakira v JAR.

Maven ponuja številne dodatne možnosti za nadzor nad upravljanjem JAR-ja, ne glede na to, ali gre za debel ali tanek JAR, in določanje izvršljive datoteke glavni razred. Oglejte si dokumente Maven, če želite izvedeti več o upravljanju datotek v Mavenu.

Ko boste projekt združili v paket, boste verjetno želeli izdati namestitev mvn. Ta ukaz potisne projekt v lokalno skladišče Maven. Ko je enkrat v lokalnem skladišču, je na voljo drugim projektom Maven v vašem lokalnem sistemu. To je uporabno za razvojne scenarije, kjer vi in ​​/ ali vaša ekipa ustvarjate JAR-je odvisnosti, ki še niso objavljeni v osrednjem repozitoriju.

Dodatni ukazi Maven

Enter mvn test ko ste pripravljeni za zagon preskusov enot, ki ste jih določili v / src / java / test imenik.

Enter mvn prevajanje ko ste pripravljeni na sestavljanje datotek razredov projekta. Če izvajate namestitev vročega uvajanja, ta ukaz sproži nalagalnik razreda vročega uvajanja. (Orodje za vroč razpored - kot je Spring Boot's mvn spring-boot: zaženi ukaz - bo spremljal datoteke učil za spremembe, pri prevajanju pa bodo izvorne datoteke zbrane in tekoča aplikacija bo odražala te spremembe.)

Začetek novega projekta: Arhetipi v Mavenu in pomladi

A Mavenov arhetip je predloga za zagon novih projektov, ki temelji na različnih vnaprej določenih nastavitvah. Vsak arhetip ponuja vnaprej zapakirane odvisnosti, na primer za Java EE ali projekt spletne aplikacije Java. Iz obstoječega projekta lahko ustvarite tudi nov arhetip, nato pa ga uporabite za hitro ustvarjanje novih projektov na podlagi teh vnaprej določenih postavitev. Oglejte si dokumentacijo Maven, če želite izvedeti več o arhetipih Apache Maven.

Okvir Spring, ki dobro deluje z Mavenom, ponuja dodatne, dodelane zmogljivosti za omamljanje novih projektov. Kot primer je Spring Initializr orodje, ki vam omogoča zelo hitro določitev elementov, ki jih želite v novi aplikaciji. Initializr sam po sebi ni Mavenov arhetip, vendar služi istemu namenu, da ustvari postavitev projekta, ki temelji na predhodnih specifikacijah. V programu Initializr lahko tipkate mvn arhetip: generiraj in preglejte možnosti, da najdete arhetip, primeren za to, kar gradite.

Dodajanje odvisnosti

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