Programavimas

„Maven 2 POM“ demistifikuotas

Statyti projektą yra sudėtingas verslas. Dėl dešimčių užduočių, reikalingų konvertuojant failą „Hodge-Podge“ į darbo programą, tiesiogine prasme yra šimtai įrankių, kurie daro viską, pradedant šaltinio kodo generavimu, kompiliavimu, testavimu, platinimu ir ruošiant rytinę kavą (jei randi, mielas skaitytojau, pranešk man). Daugelis šių programų puikiai veikia. Deja, tiems iš mūsų, kurie valdo didelio masto kūrimo sistemas pragyvenimui, retai būna daug bendrumo; kiekvienai programai reikalingas atskiras diegimas ir ezoterinė konfigūracija. Neišvengiamas faktas tapo mūsų gyvenimo faktas, kad dauguma komponavimo sistemų yra specialiai sukurtos klijuojant rankiniu būdu šiuos įrankius keliais „homebrew“ scenarijais (taip, „Ant“ scenarijai skaičiuojami).

„Maven“ yra daugiau nei kitas kūrimo įrankis sistema. Tai aiškiai atskiria jūsų kodą nuo konfigūracijos failų, dokumentų ir priklausomybių. „Maven“ stebėtinai lanksčiai leidžia vartotojams sukonfigūruoti daugumą savo kodo aspektų, taip pat valdo papildinių elgseną, individualius tikslus ir net patį kūrimo gyvavimo ciklą. Mavenas yra tikroji struktūra, ir šiose sienose gyvena jūsų projektas; jis nori būti priimantis šeimininkas.

Tačiau problema vis dar išlieka: valdyti tūkstančių individualiai sukurtų scenarijų darbą vienoje sistemoje yra sunku ir, norint tai padaryti teisingai, reikia daug informacijos. Laimei, „Maven 2“ komandai sekėsi gana sėkmingai. Mokydamasis iš „Maven 1“ klaidų, nesuskaičiuojamų vartotojų prašymų, koregavimo ir atnaujinimo, „Maven 2“ yra galingesnis nei bet kada. Deja, su didele galia ateina puiki konfigūracija. Kad „Maven 2“ artefaktai būtų lengvai perkeliami vienetai, ta sudėtinga konfigūracija patenka į vieną failą. Įveskite „Maven POM“.

Kas yra POM?

POM reiškia projekto objekto modelį. Tai yra „Maven“ projekto XML reprezentacija, laikoma faile pavadinimu pom.xml. Dalyvaujant Maveno žmonėms, kalbėjimas apie projektą yra kalbėjimas filosofine prasme, ne tik rinkmena rinkmenų, kuriose yra kodas. Projekte yra konfigūracijos failai, taip pat dalyvaujantys kūrėjai ir jų atliekami vaidmenys, defektų sekimo sistema, organizacija ir licencijos, URL, kuriame gyvena projektas, projekto priklausomybės ir visos kitos smulkmenos, kurios yra naudojamos norint suteikti kodą gyvenimo. Projektas yra vieno langelio principas visiems su juo susijusiems dalykams. Tiesą sakant, „Maven“ pasaulyje projekte nebūtinai turi būti jokio kodo, tik „pom.xml“. Vėliau straipsnyje susidursime su pora tokio tipo projektų.

Greita struktūrinė apžvalga

POM yra didelis ir sudėtingas, todėl jo suskaidymas į gabalus palengvina virškinimą. Šios diskusijos tikslais šie kūriniai yra pergrupuoti į keturis loginius vienetus, kaip parodyta 1 paveiksle: POM ryšiai, informacija apie projektą, sąrankos parametrai ir sukūrimo aplinka. Pirmiausia aptarsime POM santykius.

Žemiau pateikiamas elementų, esančių tiesiai po POM projekto elementu, sąrašas. Pastebėti, kad modelio versija yra 4.0.0. Šiuo metu tai yra vienintelė palaikoma „Maven 2“ POM versija ir ji visada reikalinga. „Maven 4.0.0“ XML schemos apibrėžimas yra //maven.apache.org/maven-v4_0_0.xsd. Aukščiausio lygio elementai yra šie:

4.0.0

... ... ... ... ... ... ...

... ... ... ... ... ... ... ...

... ... ... ...

... ... ... ...

... ... ... ... ...

POM santykiai

Pirmoji mūsų darbo tvarka yra ištirti projektų santykius, pavaizduotus 2 paveiksle kaip 1 paveiksle pateiktą viršutinį kairįjį diagramos kampą.

Projektai turi būti kažkaip susiję. Nuo pirmųjų surinkėjų sukūrimo programinės įrangos projektai turėjo priklausomybę; „Maven“ „Java“ projektams pristatė daugiau iki šiol tokia forma nenaudotų santykių formų. Šie ryšiai yra „Maven“ koordinatės, koordinatėmis pagrįstos priklausomybės, projekto paveldėjimas ir agregavimas.

Koordinatės

Kiekviename „Maven“ projekte yra unikalus identifikatorius, pavadintas projekto pavadinimu koordinatės, kuris veikia kaip artefakto adresas, suteikdamas jam unikalią vietą Maveno visatoje. Jei projektai negalėtų būti tarpusavyje susiję, koordinatės nereikėtų. Tai yra, jei visata turėjo tik vieną namą, kam jai reikalingas adresas, pavyzdžiui, 315 Cherrywood Lane?

Žemiau pateiktas kodas yra minimalus POM, kurį leis „Maven 2“ -, ir yra visi privalomi laukai. Jie veikia kaip vektorius Maveno erdvėje su elementais grupuotoju, identifikatoriumi ir laiko žyme.

4.0.0org.codehaus.mojoa1

„Maven“ pasaulyje šie trys pagrindiniai elementai („Maven“ trejybė - žiūrėk į jo šlovę!) Sudaro POM koordinates. Koordinatės pavaizduotos 3 paveiksle.

Galbūt šis POM pats savaime nėra toks įspūdingas. Tai gerėja.

Priklausomybės

Vienas iš galingiausių „Maven“ aspektų yra projekto priklausomybių valdymas, o „Maven 2“ - tai tranzityvinės priklausomybės. 4 paveiksle parodyta, kaip mes juos vaizduosime grafiškai.

Priklausomybės valdymas turi senas tradicijas būti sudėtingu betvarkės dalyku, išskyrus patį nereikšmingiausią projektą. „Jarmageddon“ greitai atsiranda, kai priklausomybės medis tampa milžiniškas, sudėtingas ir nepatogus architektams, kuriuos paniekina nauji absolventai, kurie „visiškai galėjo tai padaryti geriau“. Toliau pateikiamas „Jar Hell“, kur priklausomybės nuo vienos sistemos versijos nėra visiškai tos pačios versijos, kurios naudojamos kuriant; jie turi netinkamą versiją arba prieštaringas versijas tarp panašiai pavadintų JAR. Taigi viskas pradeda lūžti ir tiksliai nustatyti, kodėl sunku. Mavenas išsprendžia abi šias problemas turėdamas bendrą vietinę saugyklą, iš kurios galima susieti teisingus projektus, versijas ir visus.

Paveldėjimas

Viena iš savybių, kurias „Maven 2“ atneša iš „Maven 1“ dienų, yra projekto paveldėjimas, kaip parodyta 5 paveiksle. Kūrimo sistemose, tokiose kaip „Ant“, paveldėjimą tikrai galima imituoti, tačiau „Maven“ žengė papildomą žingsnį, kad projekto paveldėjimas būtų aiškus projekto objekto modelį.

Šis kodas apibrėžia tėvų POM „Maven 2“:

4.0.0org.codehaus.mojob2pom

Šis tėvas atrodo panašus į mūsų pirmąjį POM, su nedideliu skirtumu. Atkreipkite dėmesį, kad mes nustatėme pakuotės tipo kaip pom, kuris reikalingas tiek pirminiams, tiek agregatorių projektams (mes aptarsime daugiau pakuotės skyriuje „Pastato nustatymai“). Jei norime naudoti pirmiau minėtą projektą kaip tėvą, galime projektą pakeisti org.codehaus.mojo: a POM būti:

4.0.0org.codehaus.mojob2a

Svarbu pažymėti, kad visi POM paveldi iš tėvų, nesvarbu, ar jie aiškiai apibrėžti, ar ne. Ši pagrindinė POM yra žinoma kaip „super POM“, ir joje yra numatytosios paveldėtos vertės. Paprastas būdas pažvelgti į numatytąsias „super POM“ konfigūracijas yra sukurti paprastą pom.xml be nieko modelio versija, groupId, artefactIdir versijair vykdydami komandą mvn pagalba: efektyvus-pom.

Be tik vertybių nustatymo paveldėti, tėvai taip pat turi galią sukurti numatytąsias konfigūracijas savo vaikams, iš tikrųjų neprimetdami jiems vertybių. Priklausomybių valdymas yra ypač galingas įrankis konfigūruoti priklausomybių rinkinį per bendrą vietą (POM tėvus). priklausomybėValdymas elemento sintaksė yra panaši į priklausomybės skyriaus. Tačiau tai leidžia vaikams paveldėti priklausomybės nustatymus, bet ne pačią priklausomybę. Pridėjus priklausomybę su priklausomybėValdymas elementas iš tikrųjų neprideda priklausomybės POM, taip pat neprideda priklausomybės vaikams; sukuria numatytąją konfigūraciją bet kuriai priklausomybei, kurią vaikas gali pasirinkti pridėti savo priklausomybės skyriuje. Nustatymai pagal priklausomybėValdymas taip pat taikoma dabartinei POM priklausomybės konfigūracijai (nors konfigūracijos, nepaisomos priklausomybės elemento viduje, visada turi viršenybę).

Apibendrinimas

Projektas su moduliais yra žinomas kaip daugiamodulinis projektas. Moduliai yra POM išvardyti projektai, vykdomi kaip rinkinys. Daugiamoduliai projektai žino savo modulius, tačiau atvirkščiai nebūtinai yra tiesa, kaip parodyta 6 paveiksle.

Darant prielaidą, kad pirminis POM yra pirminiame kataloge, kuriame yra projekto POM a gyvena, ir kad projektas a taip pat gyvena to paties pavadinimo kataloge, mes galime pakeisti pagrindinį POM b sujungti vaiką a pridedant jį kaip modulį:

4.0.0org.codehaus.mojob2poma

Dabar jei bėgtume mvn kompiliuoti pagrindiniame kataloge pamatysite, kad kūrimas prasideda:

[INFO] Ieškoma projektų ... [INFO] Reaktoriaus sudarymo tvarka: [INFO] Neįvardinta - org.codehaus.mojo: b: pom: 2 [INFO] Neįvardinta - org.codehaus.mojo: a: stiklainis: 2 

„Maven“ gyvavimo ciklas dabar bus vykdomas iki gyvavimo ciklo fazės, nurodytos teisinga tvarka; tai yra, kiekvienas artefaktas yra statomas po vieną, ir jei vienam artefaktui reikia pirmiausia pastatyti kitą, jis bus.

Pastaba apie paveldėjimą ir sujungimą

Paveldėjimas ir kaupimas sukuria gražią dinamiką valdant kūrinius per vieną, aukšto lygio POM. Dažnai matysite projektus, kurie yra ir tėvai, ir daugiamoduliai, pvz., Aukščiau pateiktą pavyzdį. Dėl jų papildomumo jie tampa natūraliais deriniais. Net „Maven 2“ projekto branduolys eina per vieną tėvą / daugiamodulį POM org.apache.maven: maven, todėl „Maven 2“ projekto kūrimą galima atlikti viena komanda: mvn kompiliuoti. Nors daugiamodulis ir vienas iš tėvų vartojami kartu, jie nėra vienas ir tas pats. POM projektas (veikiantis kaip vienas iš tėvų) gali būti paveldėtas, tačiau tas pagrindinis projektas nebūtinai sujungia modulius. Ir atvirkščiai, POM projektas gali apjungti projektus, kurie iš jo nepaveldimi.

Kai sujungsite visas keturias lygties dalis, tikimės, kad pamatysite „Maven 2“ santykių mechanizmo galią, kaip parodyta 7 paveiksle.

„Maven“ suteikia mums gražų pagrindą, kaip susieti projektus tarpusavyje, ir per šiuos santykius galime sukurti papildinius, kuriuos galima pakartotinai naudoti pagal bet kurį projektą pagal Maveno konvencijas. Tačiau gebėjimas valdyti projekto santykius yra tik dalis bendros Maveno lygties. Likusi POM yra susijusi ne su kitais projektais, bet su jo sukūrimo parametrais, informacija ir aplinka. Greitai suprasdami, kaip projektai yra tarpusavyje susiję, pradėkime ieškoti, kaip POM yra informacija apie patį projektą.

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