Programiranje

Maven 2 POM je demistificiral

Gradnja projekta je zapleteno poslovanje. Zaradi ducat nalog, ki so potrebne za pretvorbo vaših mešanih datotek v delovni program, obstaja dobesedno na stotine orodij, ki naredijo vse od ustvarjanja izvorne kode, do sestavljanja, testiranja, distribucije in kuhanja jutranje kave (če najdete enega, dragi bralec, sporočite mi). Mnogi od teh programov so odlični pri svojem delu. Na žalost je za tiste, ki se preživljamo z velikimi gradbenimi sistemi, le redko kaj skupnega; vsak program zahteva svojo različno namestitev in ezoterično konfiguracijo. V našem življenju je postalo neizogibno dejstvo, da je večina sistemov za gradnjo narejena po meri z ročnim lepljenjem teh orodij z več domačimi pisavami (ja, štejejo skripte Ant).

Maven je bolj kot drugo orodje za gradnjo okvir. Kodo čisto ločuje od konfiguracijskih datotek, dokumentacije in odvisnosti. Maven je presenetljivo prilagodljiv pri omogočanju uporabnikom, da konfigurirajo večino vidikov svoje kode, pa tudi pri nadzoru vedenja vtičnikov, posameznih ciljev in celo samega življenjskega cikla gradnje. Maven je dejanska zgradba in znotraj teh zidov prebiva vaš projekt; želi biti gostoljuben gostitelj.

Toda težava še vedno ostaja: upravljanje dela tisočev skriptov za izdelavo po meri v enem okviru je težko in za pravilno izvajanje zahteva veliko informacij. Na srečo je bila ekipa Maven 2 dokaj uspešna. Učimo se iz napak Maven 1, neštetih zahtev uporabnikov, prilagajanja in posodabljanja, Maven 2 je močnejši kot kdaj koli prej. Na žalost z veliko močjo prihaja tudi odlična konfiguracija. Da bi bili artefakti Maven 2 lahko prenosljive enote, ta zapletena konfiguracija pade v eno datoteko. Vnesite Maven POM.

Kaj je POM?

POM pomeni projektni objektni model. Je XML predstavitev projekta Maven, ki je v datoteki z imenom pom.xml. V prisotnosti Mavenovcev je govor o projektu govor v filozofskem smislu, ne le nabor datotek, ki vsebujejo kodo. Projekt vsebuje konfiguracijske datoteke, vključene razvijalce in vloge, ki jih igrajo, sistem za sledenje napakam, organizacijo in licence, URL, kjer projekt živi, ​​odvisnosti od projekta in vse druge majhne koščke, ki pridejo v poštev za dajanje kode življenje. Projekt je na enem mestu za vse stvari, povezane z njim. Pravzaprav v svetu Maven projekt sploh ne sme vsebovati kode, zgolj pom.xml. V nadaljevanju članka bomo srečali nekaj takšnih vrst projektov.

Hiter strukturni pregled

POM je velik in zapleten, zato ga razbijanje na koščke olajša prebavo. Za namene te razprave so ti deli zbrani v štiri logične enote, kot je prikazano na sliki 1: POM odnosi, informacije o projektu, nastavitve gradnje in okolje gradnje. Začeli bomo z razpravo o odnosih POM.

Spodaj je seznam elementov neposredno pod projektnim elementom POM. Opazite to modelVersion vsebuje 4.0.0. To je trenutno edina podprta različica POM za Maven 2 in je vedno potrebna. Opredelitev sheme XML Maven 4.0.0 se nahaja na //maven.apache.org/maven-v4_0_0.xsd. Njegovi elementi na najvišji ravni so naslednji:

4.0.0

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

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

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

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

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

POM odnosi

Naš prvi poslovni načrt je raziskati projektne odnose, ki so na sliki 2 predstavljeni kot zgornji levi kot grafikona na sliki 1.

Projekti se morajo na nek način povezati med seboj. Od nastanka prvih monterjev so bili programi programske opreme odvisni; Maven je predstavil več oblik odnosov, ki doslej še niso bili uporabljeni v takšni obliki za projekte Java. Ti odnosi so Mavenove koordinate, odvisnosti, ki temeljijo na koordinatah, dedovanje projektov in združevanje.

Koordinate

Vsak projekt Maven vsebuje svoj edinstven identifikator, poimenovan projekt koordinate, ki deluje kot naslov artefakta in mu daje edinstveno mesto v vesolju Maven. Če se projekti ne bi mogli medsebojno povezati, koordinate ne bi bile potrebne. Se pravi, če bi vesolje imelo samo eno hišo, zakaj bi rabilo naslov, kot je 315 Cherrywood Lane?

Spodnja koda je najmanjši POM, ki ga Maven 2 omogoča -, , in so vsa obvezna polja. V prostoru Maven delujejo kot vektor z združevalci elementov, identifikatorjem in časovnim žigom.

4.0.0org.codehaus.mojoa1

V svetu Maven ti trije glavni elementi (trojica Maven - glej njegova slava!) Tvorijo koordinate POM-a. Koordinate predstavlja slika 3.

Morda ta POM sam po sebi ni tako impresiven. Postaja boljše.

Odvisnosti

Eden najmočnejših vidikov Mavena je obvladovanje projektnih odvisnosti, v Maven 2 pa tudi prehodne odvisnosti. Slika 4 prikazuje, kako jih bomo grafično predstavili.

Upravljanje odvisnosti ima dolgo tradicijo, da je zapletena zmešnjava za vse, razen za najbolj nepomembne projekte. "Jarmageddon" hitro nastopi, ko drevo odvisnosti postane ogromno, zapleteno in neprijetno za arhitekte, ki jih prezirajo novi diplomanti, ki bi jih "popolnoma lahko naredili bolje." Sledi "Jar Hell", kjer različice odvisnosti od enega sistema niso povsem enake različicam, kot se uporabljajo za razvoj; imajo napačno različico ali nasprotujoče si različice med podobno imenovanimi JAR-ji. Zato se stvari začnejo lomiti in natančno določiti, zakaj se izkaže za težko. Maven rešuje obe težavi z skupnim lokalnim skladiščem, od koder se lahko povežejo s pravilnimi projekti, različicami in vsem.

Dedovanje

Ena od funkcij, ki jih Maven 2 prinaša iz Maven 1 dni, je dedovanje projekta, kot je prikazano na sliki 5. V sistemih gradnje, kot je Ant, lahko dedovanje zagotovo simuliramo, vendar je Maven naredil dodaten korak, da je dedovanje projekta izrecno projektni objektni model.

Naslednja koda definira nadrejeni POM v Maven 2:

4.0.0org.codehaus.mojob2pom

Ta starš je z manjšo razliko videti podoben našemu prvemu POM. Obvestilo, da smo nastavili embalaža vnesite kot pom, ki je potreben tako za nadrejene kot za agregatne projekte (več bomo obravnavali v embalaža v razdelku "Nastavitve gradnje"). Če želimo zgornji projekt uporabiti kot nadrejeni, ga lahko spremenimo org.codehaus.mojo: a POM bo:

4.0.0org.codehaus.mojob2a

Pomembno je omeniti, da vsi POM-ji podedujejo od starša, ne glede na to, ali so izrecno določeni ali ne. Ta osnovni POM je znan kot "super POM" in vsebuje privzeto podedovane vrednosti. Privzete konfiguracije super POM-a lahko preprosto pogledate tako, da ustvarite preprost pom.xml, ki nima ničesar drugega modelVersion, groupId, artefaktId, in različicoin zagon ukaza mvn pomoč: učinkovit-pom.

Poleg tega, da preprosto nastavijo vrednosti za dedovanje, imajo starši tudi moč ustvariti privzete konfiguracije za svoje otroke, ne da bi jim dejansko vsiljevali vrednosti. Upravljanje odvisnosti je še posebej močan instrument za konfiguriranje nabora odvisnosti na skupni lokaciji (nadrejeni POM). The odvisnostUpravljanje sintaksa elementa je podobna sintaksi razdelka o odvisnosti. Vendar pa otrokom dovoli, da podedujejo nastavitve odvisnosti, ne pa tudi odvisnosti same. Dodajanje odvisnosti z odvisnostUpravljanje element dejansko ne doda odvisnosti POM-u, niti ne doda odvisnosti otrokom; ustvari privzeto konfiguracijo za katero koli odvisnost, ki jo otrok lahko doda v svojem odseku odvisnosti. Nastavitve do odvisnostUpravljanje veljajo tudi za trenutno konfiguracijo odvisnosti POM (čeprav imajo konfiguracije, ki jih preglasimo element odvisnosti, vedno prednost).

Združevanje

Projekt z moduli je znan kot multimodalni projekt. Moduli so projekti, ki jih POM našteva in se izvajajo v kompletu. Multimodularni projekti poznajo svoje module, vendar obratno ni nujno res, kot je prikazano na sliki 6.

Ob predpostavki, da je nadrejeni POM v nadrejenem imeniku, kjer je POM za projekt a življenja, in da je projekt a tudi v istoimenskem imeniku, lahko spremenimo nadrejeni POM b združiti otroka a tako da ga dodate kot modul:

4.0.0org.codehaus.mojob2poma

Zdaj, če bi tekli mvn prevajanje v osnovnem imeniku bi videli, kako se gradnja začne z:

[INFO] Iskanje projektov ... [INFO] Vrstni red reaktorja: [INFO] Neimenovan - org.codehaus.mojo: b: pom: 2 [INFO] Neimenovan - org.codehaus.mojo: a: jar: 2 

Življenjski cikel Maven se bo zdaj izvajal do faze življenjskega cikla, določene v pravilnem vrstnem redu; to pomeni, da je vsak artefakt zgrajen posamezno, in če en artefakt zahteva, da je najprej zgrajen drug, bo.

Opomba o dedovanju in združevanju

Dedovanje in združevanje ustvarjata lepo dinamiko za nadzor zgradb z enim samim POM na visoki ravni. Pogosto boste videli projekte, ki so tako starši kot multimoduli, kot je primer zgoraj. Zaradi njihove komplementarnosti se naravno ujemata. Tudi jedro projekta Maven 2 teče prek enega nadrejenega / multimodularnega POM org.apache.maven: maven, zato lahko gradnjo projekta Maven 2 izvede en sam ukaz: mvn prevajanje. Čeprav se multimodul in starš uporabljata skupaj, nista enaka in ju ne bi smeli zamenjati. Projekt POM (ki deluje kot nadrejeni) je lahko podedovan, vendar ta nadrejeni projekt nujno ne združuje nobenih modulov. Nasprotno pa lahko projekt POM združi projekte, ki ga ne podedujejo.

Ko bomo sestavili vse štiri dele enačbe, upamo, da boste videli moč mehanizma razmerja Maven 2, kot je prikazano na sliki 7.

Maven nam daje lep okvir za medsebojno povezovanje projektov in s pomočjo teh odnosov lahko ustvarimo vtičnike, ki jih lahko ponovno uporabi kateri koli projekt, ki sledi Mavenovim konvencijam. Toda sposobnost upravljanja projektnih odnosov je le del celotne Mavenove enačbe. Preostali del POM se ne ukvarja z drugimi projekti, temveč z nastavitvami gradnje, informacijami in okoljem. S hitrim razumevanjem, kako se projekti med seboj ne nanašajo, začnimo preučevati, kako POM vsebuje informacije o pravem projektu.

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