Programavimas

Kas yra Mavenas? „Java“ kūrimo ir priklausomybės valdymas

„Apache Maven“ yra kertinis „Java“ kūrimo akmuo ir dažniausiai naudojamas „Java“ paketų valdymo įrankis. Supaprastintas „Maven“ konfigūravimo modelis, pagrįstas XML, leidžia kūrėjams greitai aprašyti ar suvokti bet kurio „Java“ pagrindu sukurto projekto metmenis, o tai leidžia greitai pradėti ir dalytis naujais projektais. „Maven“ taip pat palaiko bandomąjį kūrimą, ilgalaikę projekto priežiūrą, o deklaratyvi konfigūracija ir platus papildinių asortimentas daro tai populiariu CI / CD variantu. Šis straipsnis yra greitas įvadas į „Maven“, įskaitant „Maven POM“ ir katalogų struktūrą, bei komandos, kaip sukurti pirmąjį „Maven“ projektą.

Atkreipkite dėmesį, kad naujausias „Maven“ leidimas šio rašymo metu yra „Maven 3.6.3“.

Mavenas prieš skruzdėlę ir Gradle'ą

„Maven“ nėra vienintelis „Java“ ekosistemos kūrimo įrankis, nors ir pats populiariausias. „Ant“, ankstesnės kartos XML konfigūravimo įrankis, neturi standartizuotos „Maven“ praktikos ir priklausomybės valdymo, tačiau siūlo lankstumą, kurio nerasite naudodami „Maven“. „Gradle“ yra naujesnis įrankis, veikiantis „Maven“ ekosistemos viršuje (naudojant „Maven“ saugyklas), tačiau palaikant konfigūravimui naudojamas „Groovy“ arba „Kotlin“ pagrįstas DSL. Visi trys yra geri savarankiški kūrimo įrankiai, kuriuos kiekvieną galima integruoti į CI / CD procesą. Svarbu pasirinkti tinkamą savo poreikiams ir žinoti, kaip tinkamai juo naudotis.

Kaip veikia Mavenas

Kaip ir daugelis puikių įrankių, Mavenas imasi to, kas kažkada buvo per daug komplikuota (konfigūracijos pragaras), ir supaprastina virškinamomis dalimis. Maveną sudaro trys komponentai:

  • POM: failas, apibūdinantis „Maven“ projektą ir jo priklausomybes.
  • Katalogas: standartizuotas „Maven“ projekto aprašymo formatas POM.
  • Saugyklos: kur saugoma ir atrandama trečiųjų šalių programinė įranga.

„Maven POM“: Kiekvieno „Java“ projekto, kuriame naudojamas „Maven“, šakniniame kataloge yra POM (projekto objekto modelio) failas. pom.xml aprašomos projekto priklausomybės ir nurodoma, kaip jį sukurti. (Priklausomybės yra trečiosios šalies programinė įranga, reikalinga projektui. Keletas įprastų pavyzdžių yra „JUnit“ ir „JDBC“. Visų galimų įrankių ir populiarių priklausomybių sąrašą rasite „Maven Central“ saugykloje.)

„Maven“ katalogas: „Maven“ katalogas įgyvendina tai, kas vadinama susitarimas dėl konfigūracijos, elegantiškas konfigūracijos pragaro sprendimas. Užuot reikalavus, kad kūrėjai apibrėžtų kiekvieno naujo projekto maketą ir rankiniu būdu sukonfigūruotų komponentus (kaip buvo su makefile ir Ant), Mavenas nustato bendrą projekto struktūrą ir siūlo standartinį failo formatą, apibūdinantį jo veikimą. Jūs tiesiog prijungiate savo reikalavimus, o Mavenas paskambina į priklausomybes ir sukonfigūruoja jums projektą.

Centralizuotos saugyklos: Galiausiai Mavenas naudoja centralizuotas saugyklas, norėdamas atrasti ir paskelbti projektų paketus kaip priklausomybes. Kai nurodysite savo projekto priklausomybę, „Maven“ ją suras centralizuotoje saugykloje, atsisiųs į vietinę saugyklą ir įdiegs į jūsų projektą. Dažniausiai viso to nematote jūs, kaip kūrėjas.

Prieiga prie „Maven“ priklausomybių

Pagal numatytuosius nustatymus „Maven“ sprendžia priklausomybes iš „Maven“ centrinės saugyklos. Dažna alternatyva yra „JCenter“, turinti platesnį galimų paketų rinkinį. Organizacijos taip pat skelbia ir talpina vidines saugyklas, kurios gali būti viešos ar privačios. Norėdami pasiekti saugyklą, nurodykite jos URL „Maven POM“ arba galite nurodyti „Maven“ ieškoti kitose saugyklose.

„Maven“ diegimas

„Maven“ yra „Java“ projektas, todėl prieš jį įdiegdami turite turėti JDK savo diegimo aplinkoje. (Norėdami sužinoti daugiau apie JDK atsisiuntimą ir įdiegimą, žr. „Kas yra JDK? Įvadas į„ Java “kūrimo rinkinį“.)

Kai atliksite „Java“ kūrimo aplinkos sąranką, „Maven“ galėsite įdiegti atlikdami vos kelis veiksmus:

  1. Atsisiųskite naujausią „Maven“ leidimą („Maven 3.6.3“ nuo šio rašymo).
  2. Ištraukite apache.maven .zip failą į patogią vietą.
  3. Įdėkite tą failą į savo kelią. Pavyzdžiui, „Unix“ arba „Linux“ sistemoje: eksportuoti PATH = $ PATH: / home / maven /.

Dabar turėtumėte turėti prieigą prie mvn komandą. Tipas mvn -v kad įsitikintumėte, jog sėkmingai įdiegėte „Maven“.

„Maven POM“

Kiekvieno Maveno projekto šaknis yra pom.xml failą. Nepaisant savo varginančios reputacijos, XML iš tikrųjų veikia gana gerai šiuo naudojimo atveju. Maveno POM yra lengvai skaitomas ir atskleidžia daugybę to, kas vyksta projekte. (Jei dirbote su „JavaScript“, pom.xml savo paskirtimi yra panašus į Node NPM paketas.json failą.)

1 sąrašas rodo labai paprastą Maveną pom.xml.

Sąrašas 1. Paprastas „Maven POM“

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

Suprasti „Maven POM“

Kai jūs tai sužinosite, POM nėra paslaptingas. Norėdami pradėti, galite pereiti per XML preambulę, kurioje tiesiog nurodoma oficiali POM schema. Atkreipkite dėmesį, kad XML prasideda modelio versijavis dėlto. Tai nurodo Mavenui, kokią POM versiją naudoti, šiuo atveju „Maven POM 4.0.0“.

Kitas, jūs turite groupId, artefactIdir versija. Šie trys atributai kartu unikaliai identifikuoja kiekvieną Maven'o valdomą šaltinį saugykloje. Šie failo viršuje esantys atributai apibūdina jūsų „Maven“ projektą.

Dabar pažvelk į priklausomybės skyriuje POM, kur aprašome projekto priklausomybes. Šiuo atveju mes iki šiol ištraukėme tik vieną priklausomybę - „JUnit“. Atkreipkite dėmesį, kad „JUnit“ taip pat apibūdinamas pagal jį groupId, artefactIdir versija.

Nesvarbu, ar aprašote savo projektą, ar nuo projekto priklausomybės, šios reikšmės nuosekliai nurodo Mavenui, kur rasti projektą „Maven“ saugykloje ir kurią versiją galima naudoti.

Patalpinkite savo projektą „Maven“ saugykloje

Turėkite omenyje, kad POM apibrėžia viską, ko reikia jūsų projektui vykdyti, tačiau jis taip pat apibūdina jūsų projektą kaip galimą priklausomybę. Jei kuriate projektą, kuris bus priklausomas - tarkime, kuriate biblioteką kitiems projektams naudoti, turėsite padaryti ją prieinamą vienu iš keturių būdų:

  1. Padarykite ją prieinamą vietoje.
  2. Skelbti privačiai valdomoje nuotolinėje saugykloje.
  3. Paskelbti debesyje veikiančioje privačioje saugykloje.
  4. Skelbkite viešoje saugykloje, tokioje kaip „Maven Central“.

Pirmuoju atveju jūs visiškai nenaudojate nuotolinės talpyklos. Vietoj to kiti kūrėjai atsisiųs ir įdiegs jūsų projektą savo „Maven“ atpirkimo programoje naudodami mvn įdiegti komandą.

Antruoju atveju naudojate priglobtą „Maven“ saugyklą, naudodamiesi privačiai valdomu serveriu, norėdami paskelbti ir atsisiųsti priklausomybes. Tam jums reikia saugyklos tvarkytuvo, pvz., „Apache Archiva“.

Naujesnė alternatyva yra naudoti privatų nuotolinį atpirkimo sandorį, tačiau pasikliaukite debesies pagrindu veikiančia paslauga, pavyzdžiui, „Cloudsmith“. Tai suteikia naudos iš nuotoliniu būdu priglobtų priklausomybių, nesistengiant atpirkimo serverio. Ta paslauga, žinoma, mokama.

Galiausiai nedidelė dalis projektų pateks į „Central Maven“ saugyklą arba „JCenter“, kurie skirti plačiai naudojamiems viešiesiems paketams. Jei kuriate atviro kodo priklausomybę, kuria galės naudotis kiti, jums reikės vienos iš šių centralizuotų saugyklų, kad jūsų darbas būtų prieinamas pasauliui.

  • Sužinokite daugiau apie savo projekto talpinimą „Maven“ saugykloje ir gaukite galimų saugyklų sąrašą.
  • Žr. Oficialią „Maven“ dokumentaciją apie „Maven Release“ papildinį, naudojamą rengiant ir tvarkant programinę įrangą, paskelbtą „Maven“ saugykloje.

Sukurkite „Maven“ paketą

Jei sukursite pom.xml iš sąrašo 1 ir įdėkite jį į katalogą, galėsite paleisti Maven komandas prieš jį. „Maven“ turi daugybę komandų, o papildinį galima rasti daugiau, tačiau norint pradėti, reikia žinoti tik kelias.

Pirmąją komandą pabandykite vykdyti mvn paketas. Nors dar neturite jokio šaltinio kodo, vykdydami šią komandą Mavenui liepiama atsisiųsti priklausomybę nuo „JUnit“. Galite patikrinti „Maven“ registravimo išvestį, kad įsitikintumėte, jog priklausomybė įkelta.

Priklausomybės apimtis

Galbūt pastebėjote, kad POM pavyzdyje priklausomybė nuo „JUnit“ yra pažymėta kaip apimties testas. Taikymo sritis yra svarbi priklausomybės valdymo sąvoka, iš esmės leidžianti apibrėžti ir apriboti, kaip kiekviena priklausomybė bus vadinama ir naudojama jūsų projekte. testas taikymo sritis užtikrina, kad priklausomybė yra prieinama vykdant bandymus, bet ne tada, kai programa yra supakuota diegti.

Kita paplitusi taikymo sritis yra jeigu, kuris sako sistemai, kad priklausomybę teikia vykdymo aplinka. Tai dažnai pastebima naudojant „Servlet“ JARS diegiant į servleto konteinerį, nes konteineris suteiks tuos JARS. Norėdami gauti išsamų „Maven“ priklausomybės apimčių sąrašą, žr. „Apache Maven“ dokumentaciją.

Maveno katalogo struktūra

Atlikę komandą, atkreipkite dėmesį, kad Mavenas sukūrė / taikinys kataloge. Tai yra standartinė jūsų projekto rezultatų vieta. Priklausomybės, kurias atsisiuntėte, bus / taikinys katalogą, kartu su sukompiliuotais programų artefaktais.

Tada norite pridėti „Java“ failą, kurį įdėsite į „Maven“ src / kataloge. Sukurti /src/main/java/com/javaworld/Hello.java failą su 2 sąrašo turiniu.

Sąrašas 2. Sveiki.java

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

/ src kelias yra standartinė jūsų projekto šaltinių failų vieta. Daugelyje projektų pagrindiniai failai pateikiami / src / main /, o „Java“ failai eina į klasės kelią pagal / java. Be to, jei norite įtraukti turtą, kuris yra ne kodą, pvz., konfigūracijos failus ar atvaizdus, ​​galite naudoti / src / main / resources. Šio kelio turtas bus pridėtas prie pagrindinio klasės kelio. Įeina bandomieji failai / src / test / java.

Norėdami peržiūrėti, čia yra keletas pagrindinių „Maven“ projekto struktūros dalių (kaip apibrėžta „Maven Standard Directory Structure“):

Pagrindinės „Maven Standard Directory“ struktūros dalys

pom.xmlProjekto aprašo byla
/ src / main / javaŠaltinio failų vieta
/ src / main / resourcesNe šaltinio turto vieta
/ src / test / javaBandomųjų šaltinių failų vieta
/ taikinysPastatymo išvesties vieta

„Maven“ projekto valdymas

mvn paketas komanda liepia Mavenui susieti projektą. Išduokite šią komandą, kai būsite pasirengę surinkti visus projekto failus vienoje vietoje. Prisiminkime, kad šio projekto POM faile mes nustatėme pakuotės tipą stiklainiukas, todėl ši komanda liepia Mavenui supakuoti programos failus į JAR.

„Maven“ siūlo įvairias papildomas parinktis, kaip valdyti JAR valdymą, nesvarbu, ar tai riebus, ar plonas JAR, ir nurodyti vykdomąjį failą pagrindinė klasė. Norėdami sužinoti daugiau apie failų valdymą „Maven“, žr. „Maven“ dokumentus.

Kai sujungsite projektą, greičiausiai norėsite išduoti mvn įdiegti. Ši komanda įstumia projektą į vietinę „Maven“ saugyklą. Kai jis pateks į vietinę saugyklą, jis bus prieinamas kitiems jūsų vietinės sistemos „Maven“ projektams. Tai naudinga kuriant scenarijus, kuriuose jūs ir (arba) jūsų komanda kuria priklausomybės JAR, kurie dar nepaskelbti centrinėje saugykloje.

Papildomos Maveno komandos

Įveskite mvn testas kai būsite pasirengę atlikti vieneto testus, kuriuos apibrėžėte / src / java / testas kataloge.

Įveskite mvn kompiliuoti kai būsite pasirengę sudaryti projekto klasės failus. Jei vykdote karšto diegimo sąranką, ši komanda suaktyvina karšto diegimo klasės krautuvą. (Karšto diegimo įrankis - kaip „Spring Boot“ mvn spring-boot: paleisti komanda - stebės, ar klasių rinkmenose nėra pakeitimų, o kompiliuojant bus sukompiliuoti jūsų šaltinio failai, o vykdoma programa atspindės tuos pakeitimus.)

Pradedamas naujas projektas: Archetipai Mavene ir Pavasaryje

A Maveno archetipas yra naujų projektų pradžios šablonas, pagrįstas įvairiais iš anksto nustatytais parametrais. Kiekvienas archetipas siūlo iš anksto supakuotas priklausomybes, pvz., „Java EE“ ar „Java“ žiniatinklio programų projektui. Taip pat galite sukurti naują archetipą iš esamo projekto, tada jį panaudodami greitai kurti naujus projektus pagal tuos iš anksto nustatytus išdėstymus. Norėdami sužinoti daugiau apie „Apache Maven“ archetipus, žr. „Maven“ dokumentus.

Pavasario sistema, kuri gerai veikia su „Maven“, siūlo papildomų, sudėtingų galimybių užgniaužti naujus projektus. Pavyzdžiui, „Spring Initializr“ yra įrankis, leidžiantis labai greitai apibrėžti norimus elementus naujoje programoje. „Initializr“ pats savaime nėra „Maven“ archetipas, tačiau juo siekiama to paties tikslo - sukurti projekto maketą, pagrįstą išankstinėmis specifikacijomis. „Initializr“ galite įvesti tekstą mvn archetipas: generuoti ir nuskaitykite parinktis, kad rastumėte archetipą, tinkantį tam, ką statote.

Pridedant priklausomybes