Ohjelmointi

Mikä on Maven? Java: n koontiversio ja riippuvuuden hallinta

Apache Maven on Java-kehityksen kulmakivi ja Java: n käytetyin rakennuksenhallintatyökalu. Mavenin virtaviivainen, XML-pohjainen määritysmalli antaa kehittäjille mahdollisuuden kuvata tai ymmärtää nopeasti minkä tahansa Java-pohjaisen projektin pääpiirteet, mikä tekee uusien projektien aloittamisesta ja jakamisesta helppoa. Maven tukee myös testilähtöistä kehitystä, pitkäaikaista projektin ylläpitoa, ja sen vakuuttava kokoonpano ja laaja valikoima laajennuksia tekevät siitä suositun vaihtoehdon CI / CD: lle. Tämä artikkeli on nopea esittely Maveniin, mukaan lukien Maven POM ja hakemistorakenne, sekä komennot ensimmäisen Maven-projektisi rakentamiseen.

Huomaa, että tämän kirjoituksen viimeisin Maven-julkaisu on Maven 3.6.3.

Maven vs Ant ja Gradle

Maven ei ole ainoa rakennustyökalu Java-ekosysteemissä, vaikka se onkin suosituin. Ant, aiemman sukupolven XML-pohjainen määritystyökalu, puuttuu Mavenin standardoiduista, käytäntöihin perustuvista käytännöistä ja riippuvuuden hallinnasta, mutta tarjoaa joustavuutta, jota et löydä Mavenista. Gradle on uudempi työkalu, joka toimii Maven-ekosysteemin päällä (käyttäen Mavenin arkistoja), mutta tukee Groovy- tai Kotlin-pohjaisen DSL: n käyttöä määrityksiin. Kaikki kolme ovat itsessään hyviä rakennustyökaluja, ja kukin niistä voidaan integroida CI / CD-prosessiin. Tärkeää on valita oikea tarpeisiisi ja tietää kuinka käyttää sitä asianmukaisesti.

Kuinka Maven toimii

Kuten monet hyvät työkalut, Maven ottaa kerran liian monimutkaisen (kokoonpanon helvetti) ja yksinkertaistaa sen sulaviksi osiksi. Maven koostuu kolmesta osasta:

  • POM: tiedosto, joka kuvaa Maven-projektia ja sen riippuvuuksia.
  • Hakemisto: Standardoitu muoto Maven-projektin kuvaamiseen POM: ssä.
  • Tietovarastot: Missä kolmannen osapuolen ohjelmistot tallennetaan ja löydetään.

Maven POM: Jokaisen Mavenia käyttävän Java-projektin juurihakemistossa on POM-tiedosto (projektiobjektimalli). pom.xml kuvaa projektin riippuvuudet ja kertoo kuinka rakentaa se. (Riippuvuudet ovat projektin edellyttämiä kolmannen osapuolen ohjelmistoja. Joitakin yleisiä esimerkkejä ovat JUnit ja JDBC. Katso luettelo kaikista käytettävissä olevista työkaluista ja suosituista riippuvuuksista Mavenin keskusvarastosta.)

Maven-hakemisto: Maven-hakemisto toteuttaa niin kutsutun kokoonpano, tyylikäs ratkaisu konfigurointihelvettiin. Sen sijaan, että kehittäjiä vaadittaisiin määrittelemään ulkoasu ja määrittämään komponentit manuaalisesti jokaiselle uudelle projektille (kuten Makefile ja Ant), Maven muodostaa yhteisen projektirakenteen ja tarjoaa vakiomuotoisen tiedostomuodon sen toiminnan kuvaamiseksi. Kytket vain vaatimukset, ja Maven kutsuu riippuvuuksia ja konfiguroi projektin puolestasi.

Keskitetyt arkistot: Lopuksi, Maven käyttää keskitettyjä arkistoja sekä hankepakettien löytämiseen että julkaisemiseen riippuvuuksina. Kun viitat riippuvuuteen projektissasi, Maven löytää sen keskitetystä arkistosta, lataa sen paikalliseen arkistoon ja asentaa sen projektiisi. Suurimman osan ajasta kaikki tämä on näkymätöntä sinulle kehittäjänä.

Maven-riippuvuuksien käyttäminen

Oletuksena Maven ratkaisee riippuvuudet Mavenin keskusvarastosta. Yleinen vaihtoehto on JCenter, jolla on laajempi valikoima saatavilla olevia paketteja. Organisaatiot julkaisevat ja isännöivät myös sisäisiä arkistoja, jotka voivat olla julkisia tai yksityisiä. Tietovarastoon pääsemiseksi määrität sen URL-osoitteen Maven POM: ssä tai voit ohjeistaa Mavenia etsimään muita arkistoja.

Mavenin asentaminen

Maven on Java-projekti, joten JDK on asennettava kehitysympäristöön ennen sen asentamista. (Katso lisätietoja JDK: n lataamisesta ja asentamisesta kohdasta "Mikä on JDK? Johdatus Java-kehityspakettiin".)

Kun olet asentanut Java-kehitysympäristön, voit asentaa Mavenin vain muutamalla vaiheella:

  1. Lataa viimeisin Maven-julkaisu (Maven 3.6.3 tämän kirjoituksen jälkeen).
  2. Pura apache.maven .zip-tiedosto sopivaan paikkaan.
  3. Aseta tiedosto polulle. Esimerkiksi Unix- tai Linux-järjestelmässä: vienti PATH = $ PATH: / koti / maven /.

Sinulla pitäisi nyt olla pääsy mvn komento. Tyyppi mvn -v varmista, että olet asentanut Mavenin onnistuneesti.

Maven POM

Jokaisen Maven-projektin juuri on pom.xml tiedosto. Huolimatta siitä, että XML on tunnetusti tylsää, se toimii todella hyvin tässä käyttötapauksessa. Mavenin POM on helppo lukea ja paljastaa suuren osan projektissa tapahtuvasta. (Jos olet työskennellyt JavaScriptin kanssa, pom.xml on tarkoitukseltaan samanlainen kuin Node NPM: t package.json tiedosto.)

Listaus 1 näyttää hyvin yksinkertaisen Mavenin pom.xml.

Listaus 1. Yksinkertainen Maven POM

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

Maven POM: n ymmärtäminen

Kun saat selvää, POM ei ole salaperäinen. Aloita siirtymällä XML-johdanto-osan yli, joka viittaa vain viralliseen POM-skeemaan. Huomaa XML, joka alkaa modelVersion, kuitenkin. Tämä kertoo Mavenille, mitä POM-versiota on käytettävä, tässä tapauksessa Maven POM 4.0.0.

Seuraavaksi sinulla on groupId, artefaktiIdja versio. Nämä kolme attribuuttia tunnistavat yhdessä kaikki arkiston kaikki Mavenin hallitsemat resurssit. Nämä tiedoston yläosassa olevat määritteet kuvaavat Maven-projektiasi.

Katsokaa nyt riippuvuudet POM-osio, jossa kuvataan projektin riippuvuudet. Tässä tapauksessa olemme toistaiseksi saaneet vain yhden riippuvuuden, JUnit. Huomaa, että JUnit on kuvattu myös sen muodossa groupId, artefaktiIdja versio.

Olitpa kuvaamassa omaa projektiasi tai projektiriippuvuutta, nämä arvot kertovat johdonmukaisesti Mavenille, mistä löytää projekti Maven-arkistosta ja mikä versio on käytettävissä.

Isännöi projektiasi Maven-arkistossa

Pidä mielessä, että POM määrittelee kaiken, mitä projektisi tarvitsee suorittaa, mutta se kuvaa myös projektisi potentiaalisena riippuvuutena. Jos rakennat projektia, joka on riippuvainen - esimerkiksi luodaan kirjasto muiden projektien käyttöön - sinun on asetettava se saataville yhdellä neljästä tavasta:

  1. Aseta se saataville paikallisesti.
  2. Julkaise yksityisesti hallinnoidussa etätietovarastossa.
  3. Julkaise pilvipohjaiseen yksityiseen arkistoon.
  4. Julkaise julkiseen arkistoon, kuten Maven Central.

Ensimmäisessä tapauksessa et käytä etätietovarastoa lainkaan. Sen sijaan muut kehittäjät lataavat ja asentavat projektisi paikallisesti Maven-repoonsa mvn install komento.

Toisessa tapauksessa käytät isännöityä Maven-arkistoa yksityisohjatun palvelimen avulla riippuvuuksien julkaisemiseen ja lataamiseen. Tätä varten tarvitset arkistopäällikköä, kuten Apache Archiva.

Uudempi vaihtoehto on käyttää yksityistä etärepoa, mutta luottaa pilvipohjaiseen palveluun sen hallitsemiseksi, esimerkiksi Cloudsmith. Tämä hyödyttää etäkäytettyjä riippuvuuksia ilman repo-palvelimen seisomista. Tämä palvelu on tietysti maksullinen.

Lopuksi pieni osa projekteista päätyy Central Maven -tietovarastoon tai JCenteriin, jotka on tarkoitettu laajasti käytettyihin julkisiin paketteihin. Jos luot avoimen lähdekoodin riippuvuuden, jota muut voivat käyttää, tarvitset yhden näistä keskitetyistä arkistoista, jotta työsi olisi saatavana maailmalle.

  • Lisätietoja projektisi isännöinnistä Maven-arkistossa ja saat luettelon käytettävissä olevista arkistoista.
  • Katso viralliset Maven-ohjeet Maven Release Pluginista, jota käytetään Maven-arkistoon julkaistujen ohjelmistojen valmisteluun ja hallintaan.

Rakenna Maven-paketti

Jos luot pom.xml Listauksesta 1 ja laita se hakemistoon, voit suorittaa Maven-komennot sitä vastaan. Mavenilla on useita komentoja, ja lisää on saatavilla laajennuksen kautta, mutta sinun tarvitsee tietää vain kourallinen aloittaaksesi.

Yritä suorittaa ensimmäinen komento mvn-paketti. Vaikka sinulla ei vielä ole lähdekoodia, tämän komennon suorittaminen kehottaa Mavenia lataamaan JUnit-riippuvuuden. Voit tarkistaa Mavenin lokilähdön, jotta riippuvuus on ladattu.

Riippuvuuden laajuus

Olet ehkä huomannut, että JUnit-riippuvuus esimerkissä POM on merkitty laajuuden testi. Soveltamisala on tärkeä käsite riippuvuuksien hallinnassa, ja sen avulla voit määritellä ja rajoittaa tapaa, jolla kutakin riippuvuutta kutsutaan ja käytetään projektissasi. testata soveltamisala varmistaa, että riippuvuus on käytettävissä testejä suoritettaessa, mutta ei silloin, kun sovellus on pakattu käyttöönottoa varten.

Toinen yleinen soveltamisala on tarjotaan, joka kertoo kehykselle, että riippuvuuden tarjoaa ajonaikainen ympäristö. Tämä nähdään usein Servlet-JARS-sovelluksessa, kun se otetaan käyttöön servlet-konttiin, koska säiliö tarjoaa nämä JARS-tiedostot. Apache Mavenin ohjeista saat täydellisen luettelon Mavenin riippuvuusalueista.

Mavenin hakemistorakenne

Kun komento on valmis, huomaa, että Maven on luonut a /kohde hakemistoon. Se on projektisi tuotoksen vakiopaikka. Lataamasi riippuvuudet asuvat /kohde hakemistoon sekä käännetyt sovelluksen artefaktit.

Seuraavaksi haluat lisätä Java-tiedoston, jonka sijoitat Maveniin src / hakemistoon. Luo /src/main/java/com/javaworld/Hello.java tiedosto, luettelon 2 sisällön kanssa.

Listaus 2. Hello.java

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

/ src polku on projektisi lähdetiedostojen vakiopiste. Suurin osa projekteista sijoittaa päätiedot / src / main /, jossa Java-tiedostot menevät luokan polulle alla / java. Lisäksi, jos haluat sisällyttää sisältökohteita, jotka ovat ei koodia, kuten määritystiedostoja tai kuvia, voit käyttää / src / main / resources. Tämän polun varat lisätään pääluokan polulle. Testitiedostot menevät / src / test / java.

Seuraavassa on joitain keskeisiä osia Maven-projektirakenteesta (määritelty Mavenin standardihakemistorakenteessa):

Maven-standardihakemistorakenteen keskeiset osat

pom.xmlProjektin kuvaustiedosto
/ src / main / javaLähdetiedostojen sijainti
/ src / main / resourcesLähteiden lähteiden sijainti
/ src / test / javaTestilähdetiedostojen sijainti
/kohdeKoontilähdön sijainti

Maven-projektin hallinta

mvn-paketti komento kehottaa Mavenia niputtamaan projektin. Anna tämä komento, kun olet valmis keräämään kaikki projektitiedostot yhteen paikkaan. Muista, että tämän projektin POM-tiedostossa asetimme pakkaustyypiksi purkki, joten tämä komento kehottaa Mavenia paketoimaan sovellustiedostot JAR: iin.

Maven tarjoaa useita lisävaihtoehtoja JAR: n hallinnan hallitsemiseksi riippumatta siitä, onko se rasvaa vai ohut JAR, ja määritettäessä suoritettavan pääluokka. Lisätietoja Mavenin tiedostojen hallinnasta on Maven-asiakirjoissa.

Kun olet niputtanut projektin, haluat todennäköisesti antaa mvn install. Tämä komento työntää projektin paikalliseen Maven-arkistoon. Kun se on paikallisessa arkistossa, se on muiden paikallisen järjestelmän Maven-projektien käytettävissä. Tästä on hyötyä kehityskohteissa, joissa sinä ja / tai tiimisi ovat luomassa riippuvuusselvityksiä, joita ei ole vielä julkaistu keskitetyssä arkistossa.

Muita Maven-komentoja

Tulla sisään mvn-testi kun olet valmis suorittamaan / src / java / test hakemistoon.

Tulla sisään mvn koota kun olet valmis kokoamaan projektin luokkatiedostot. Jos sinulla on hot-launch -asennus, tämä komento laukaisee luokan nopean käyttöönoton. (Kuuma käyttöönottotyökalu - kuten Spring Boot's mvn spring-boot: aja komento - seuraa luokan tiedostoja muutosten varalta, ja kääntäminen aiheuttaa lähdetiedostojesi kääntämisen ja käynnissä oleva sovellus heijastaa näitä muutoksia.)

Uuden projektin aloittaminen: arkkityypit Mavenissa ja keväällä

A Maven-arkkityyppi on malli uusien projektien aloittamiseen useiden ennalta määritettyjen asetusten perusteella. Jokainen arkkityyppi tarjoaa valmiiksi pakattuja riippuvuuksia, kuten Java EE- tai Java-verkkosovellusprojektiin. Voit myös luoda uuden arkkityypin olemassa olevasta projektista ja luoda sen avulla nopeasti uusia projekteja ennalta määritettyjen asettelujen perusteella. Katso Maven-asiakirjoista lisätietoja Apache Mavenin arkkityypeistä.

Kevään kehys, joka toimii hyvin Mavenin kanssa, tarjoaa ylimääräisiä, hienostuneita ominaisuuksia uusien projektien tukahduttamiseksi. Esimerkiksi Spring Initializr on työkalu, jonka avulla voit määrittää nopeasti haluamasi elementit uudessa sovelluksessa. Initializr ei ole sinänsä Maven-arkkityyppi, mutta sillä on sama tarkoitus luoda projektiasettelu, joka perustuu etupuolen määrityksiin. Voit kirjoittaa Initializr-sovelluksen sisällä mvn-arkkityyppi: generoi ja skannaa vaihtoehtojen läpi löytääksesi arkkityyppi, joka sopii rakennettavaksi.

Riippuvuuksien lisääminen

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