Vodič za Apache Maven
1. Uvod
Izgradnja softverskog projekta obično se sastoji od zadataka kao što su preuzimanje ovisnosti, stavljanje dodatnih staklenki na put predavanja, sastavljanje izvornog koda u binarni kôd, izvođenje testova, pakiranje prevedenog koda u raspoložive artefakte kao što su JAR, WAR i ZIP datoteke i postavljanje tih artefakata na poslužitelj aplikacija ili spremište.
Apache Maven automatizira ove zadatke, umanjujući rizik od pogrešaka ljudi prilikom ručne izrade softvera i odvajajući rad na prikupljanju i pakiranju našeg koda od rada na izradi koda.
U ovom uputstvu istražit ćemo ovaj moćan alat za opisivanje, izgradnju i upravljanje Java softverskim projektima koristeći središnju informaciju - Projektni objektni model (POM) - to je napisano u XML-u.
2. Zašto koristiti Maven?
Ključne značajke Mavena su:
- jednostavno postavljanje projekta koje slijedi najbolje prakse: Maven pokušava izbjeći što je više moguće konfiguracije, isporučujući predloške projekata (imenovanih arhetipovi)
- upravljanje ovisnostima: uključuje automatsko ažuriranje, preuzimanje i provjeru kompatibilnosti, kao i izvještavanje o zatvaranju ovisnosti (poznato i kao prijelazne ovisnosti)
- izolacija između ovisnosti o projektu i dodataka: s Mavenom, ovisnosti o projektu se preuzimaju iz spremišta ovisnosti dok se ovisnosti bilo kojeg dodatka dohvaćaju iz spremišta dodataka, što rezultira manjim brojem sukoba kada dodaci počnu preuzimati dodatne ovisnosti
- središnji sustav spremišta: ovisnosti o projektu mogu se učitati iz lokalnog datotečnog sustava ili javnih spremišta, kao što je Maven Central
3. Projektni objektni model
Konfiguracija projekta Maven vrši se putem a Projektni objektni model (POM), koju predstavlja a pom.xml datoteka. The POM opisuje projekt, upravlja ovisnostima i konfigurira dodatke za izgradnju softvera.
The POM također definira odnose među modulima višemoduljskih projekata. Pogledajmo osnovnu strukturu tipičnog POM datoteka:
4.0.0 org.baeldung org.baeldung jar 1.0-SNAPSHOT org.baeldung //maven.apache.org junit junit 4.12 test // ...
Pogledajmo pobliže ove konstrukcije.
3.1. Identifikatori projekta
Maven koristi skup identifikatora, koji se nazivaju i koordinatama, kako bi jedinstveno identificirao projekt i odredio kako treba spakirati artefakt projekta:
- groupId - jedinstveno osnovno ime tvrtke ili grupe koja je kreirala projekt
- artefaktId - jedinstveni naziv projekta
- verzija - inačica projekta
- ambalaža - način pakiranja (npr. RAT/JAR/ZIP)
Prva tri od njih (groupId: artefaktId: verzija) kombiniraju se kako bi oblikovali jedinstveni identifikator i mehanizam su kojim određujete koje će verzije vanjskih knjižnica (npr. JAR-ove) koristiti vaš projekt.
3.2. Ovisnosti
Te vanjske knjižnice koje projekt koristi nazivaju se ovisnostima. Značajka upravljanja ovisnostima u Mavenu osigurava automatsko preuzimanje tih knjižnica iz središnjeg spremišta, tako da ih ne morate pohraniti lokalno.
Ovo je ključna značajka Mavena i pruža sljedeće prednosti:
- koristi manje prostora za pohranu značajnim smanjenjem broja preuzimanja s udaljenih spremišta
- ubrzava provjeru projekta
- pruža učinkovitu platformu za razmjenu binarnih artefakata unutar vaše organizacije i izvan nje, bez potrebe za gradnjom artefakta svaki put
Da biste proglasili ovisnost o vanjskoj knjižnici, morate navesti groupId, artefaktId, i verzija knjižnice. Pogledajmo primjer:
org.springframework opruga-jezgra 4.3.5.OSLOBOĐENJE
Kako Maven obrađuje ovisnosti, preuzet će knjižnicu Spring Core u vaše lokalno spremište Maven.
3.3. Spremišta
Spremište u Mavenu koristi se za čuvanje artefakata gradnje i ovisnosti različitih vrsta. Zadani lokalni repozitorij nalazi se u .m2 / spremište mapu ispod početnog direktorija korisnika.
Ako su artefakt ili dodatak dostupni u lokalnom spremištu, Maven ih koristi. Inače se preuzima iz središnjeg spremišta i pohranjuje u lokalno spremište. Zadani središnji repozitorij je Maven Central.
Neke knjižnice, poput JBoss poslužitelja, nisu dostupne u središnjem spremištu, ali su dostupne u zamjenskom spremištu. Za te knjižnice trebate navesti URL alternativnog spremišta unutar pom.xml datoteka:
Spremište JBoss //repository.jboss.org/nexus/content/groups/public/
Imajte na umu da u svojim projektima možete koristiti više spremišta.
3.4. Svojstva
Prilagođena svojstva mogu vam pomoći da napravite svoj pom.xml datoteka lakša za čitanje i održavanje. U klasičnom slučaju korištenja koristili biste prilagođena svojstva za definiranje verzija ovisnosti vašeg projekta.
Svojstva Maven rezerviraju vrijednost i dostupna su bilo gdje u a pom.xml uporabom notacije $ {name}, gdje Ime je vlasništvo.
Pogledajmo primjer:
4.3.5.OBLAŽENJE org.springframework spring-core $ {spring.version} org.springframework spring-context $ {spring.version}
Sada ako želite nadograditi Spring na noviju verziju, morate samo promijeniti vrijednost unutaroznaka svojstva i sve ovisnosti koje koriste to svojstvo u svom oznake će se ažurirati.
Svojstva se također često koriste za definiranje varijabli puta gradnje:
$ {project.build.directory} / tmp / // ... $ {project.resources.build.folder} // ...
3.5. Izgraditi
The izgraditi odjeljak je također vrlo važan dio Mavena POM. Pruža informacije o zadanom Mavenu cilj, direktorij za sastavljeni projekt i konačno ime aplikacije. Zadana vrijednost izgraditi odjeljak izgleda ovako:
instalirati $ {basedir} / target $ {artifactId} - $ {version} filters / filter1.properties // ...
Zadana je izlazna mapa za prevedene artefakte cilj, a konačni naziv pakiranog artefakta sastoji se od artefaktId i verzija, ali možete ga promijeniti u bilo kojem trenutku.
3.6. Koristeći Profili
Još jedna važna značajka Mavena je podrška za profili. A profil je u osnovi skup vrijednosti konfiguracije. Pomoću profili, možete prilagoditi izradu za različita okruženja kao što su Proizvodnja / Test / Razvoj:
proizvodnja // ... razvoj istina // ...
Kao što možete vidjeti u gornjem primjeru, zadani profil postavljen je na razvoj. Ako želite pokrenuti proizvodnja profil, možete koristiti sljedeću Mavenovu naredbu:
mvn čista instalacija -Produkcija
4. Maven gradi životne cikluse
Svaka Mavenova izrada slijedi određeno životni ciklus. Možete izvršiti nekoliko gradnji životni ciklusciljevi, uključujući one do sastaviti kod projekta, stvorite a paket, i instalirati arhivsku datoteku u lokalnom spremištu ovisnosti Maven.
4.1. Faze životnog ciklusa
Sljedeći popis prikazuje najvažnijeg Mavena životni ciklus faze:
- potvrditi - provjerava ispravnost projekta
- sastaviti - kompilira ponuđeni izvorni kod u binarne artefakte
- test - izvršava jedinične testove
- paket - pakira prevedeni kod u arhivsku datoteku
- integracija-test - provodi dodatna ispitivanja koja zahtijevaju pakiranje
- provjeriti - provjerava je li paket valjan
- instalirati - instalira datoteku paketa u lokalno spremište Maven
- rasporediti - raspoređuje datoteku paketa na udaljeni poslužitelj ili spremište
4.2. Dodaci i Ciljevi
Maven uključiti je zbirka jednog ili više njih ciljevi. Ciljevi se izvršavaju u fazama, što pomaže odrediti redoslijed kojim se ciljevi izvršavaju se.
Bogat popis dodataka koje službeno podržava Maven dostupan je ovdje. Tu je i zanimljiv članak kako napraviti izvršnu datoteku JAR na Baeldungu pomoću raznih dodataka.
Da bih bolje razumio koji ciljevi se pokreću u kojim fazama prema zadanim postavkama pogledajte zadani Maven životni ciklus uvezi.
Da bismo prošli bilo koju od gore navedenih faza, samo moramo pozvati jednu naredbu:
mvn
Na primjer, mvn čista instalacija uklonit će prethodno stvorene jar / war / zip datoteke i prevedene klase (čist) i izvršiti sve faze potrebne za instalaciju nove arhive (instalirati).
Imajte na umu da ciljevi koje pruža dodaci mogu se povezati s različitim fazama životni ciklus.
5. Vaš prvi Maven projekt
U ovom ćemo odjeljku koristiti Mavenovu funkciju naredbenog retka za izradu Java projekta.
5.1. Generiranje jednostavnog Java projekta
Da bismo izgradili jednostavan Java projekt, pokrenimo sljedeću naredbu:
mvn arhetip: generiraj -DgroupId = org.baeldung -DartifactId = org.baeldung.java -DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false
The groupId je parametar koji ukazuje na grupu ili pojedinca koji su stvorili projekt, a to je često obrnuto ime domene tvrtke. The artefaktId je naziv osnovnog paketa koji se koristi u projektu, a mi koristimo standard arhetip.
Budući da nismo naveli verziju i vrstu pakiranja, oni će biti postavljeni na zadane vrijednosti - verzija će biti postavljena na 1,0-SNAPSHOT, a pakiranje će biti postavljeno na staklenka.
Ako ne znate koje parametre pružiti, uvijek možete odrediti interaktivniMod=pravi, tako da Maven traži sve potrebne parametre.
Nakon dovršenja naredbe imamo Java projekt koji sadrži App.java klase, što je samo jednostavan program "Hello World", u src / main / java mapu.
Imamo i primjer testne nastave u src / test / java. The pom.xml ovog projekta izgledat će slično ovome:
4.0.0 org.baeldung org.baeldung.java jar 1.0-SNAPSHOT org.baeldung.java //maven.apache.org junit junit 4.1.2 test
Kao što vidite, junit ovisnost je zadana prema zadanim postavkama.
5.2. Sastavljanje i pakiranje projekta
Sljedeći je korak sastavljanje projekta:
mvn sastaviti
Maven će trčati kroz sve životni ciklus faze potrebne za sastaviti faza za izgradnju izvora projekta. Ako želite pokrenuti samo test fazu, možete koristiti:
mvn test
Sada ćemo se pozvati na paket faza, koja će stvoriti sastavljenu arhivu staklenka datoteka:
mvn paket
5.3. Izvršenje aplikacije
Konačno, izvršit ćemo naš Java projekt s exec-maven-plugin. Konfigurirajmo potrebne dodatke u pom.xml:
src maven-compiler-plugin 3.6.1 1.8 1.8 org.codehaus.mojo exec-maven-plugin 1.5.0 org.baeldung.java.App
Prvi dodatak, maven-compiler-plugin, odgovoran je za sastavljanje izvornog koda pomoću Java verzije 1.8. The exec-maven-plugin traži mainClass u našem projektu.
Da bismo izvršili aplikaciju, izvodimo sljedeću naredbu:
mvn izvršni: java
6. Projekti s više modula
Mehanizam u Mavenu koji upravlja projektima s više modula (koji se također nazivaju agregator projekti) naziva se Rizjedač.
The Reaktor prikuplja sve dostupne module za izgradnju, zatim sortira projekte u ispravan redoslijed izrade i na kraju ih gradi jedan po jedan.
Pogledajmo kako stvoriti višemodularni nadređeni projekt.
6.1. Stvori roditeljski projekt
Prije svega, moramo stvoriti nadređeni projekt. Kako bi se stvorio novi projekt s imenom roditeljski projekt, koristimo sljedeću naredbu:
mvn arhetip: generiraj -DgroupId = org.baeldung -DartifactId = nadređeni projekt
Zatim ažuriramo vrstu pakiranja unutar pom.xml datoteka koja označava da je ovo roditelj modul:
pom
6.2. Stvaranje projekata podmodula
U sljedećem koraku kreiramo projekte podmodula iz direktorija roditelj-projekt:
cd nadređeni projekt mvn arhetip: generiraj -DgroupId = org.baeldung -DartifactId = jezgra mvn arhetip: generiraj -DgroupId = org.baeldung -DartifactId = usluga mvn arhetip: generiraj -DgroupId = org.baeldung -DartifactId = webapp
Da bismo provjerili jesmo li podmodule stvorili ispravno, pogledamo u nadređeni projekt pom.xml datoteku, gdje bismo trebali vidjeti tri modula:
osnovna usluga webapp
Štoviše, nadređeni odjeljak bit će dodan u svaki podmodul pom.xml:
org.baeldung nadređeni projekt 1.0-SNAPSHOT
6.3. Omogućite upravljanje ovisnostima u nadređenom projektu
Upravljanje ovisnostima je mehanizam za centraliziranje informacija o ovisnosti za roditeljski projekt muti-modula i njegovu djecu.
Kada imate skup projekata ili modula koji nasljeđuju zajedničkog roditelja, sve potrebne podatke o ovisnostima možete staviti u zajednički pom.xml datoteka. To će pojednostaviti reference na artefakte u djeteta POMs.
Pogledajmo uzorke roditelja pom.xml:
org.springframework opruga-jezgra 4.3.5.Opusti // ...
Proglašavanjem opružna jezgra inačici u roditelju, svi podmoduli koji ovise o opružna jezgra može proglasiti ovisnost koristeći samo groupId i artefaktId, a verzija će se naslijediti:
org.springframework opruga-jezgra // ...
Štoviše, možete osigurati izuzeća za upravljanje ovisnostima kod roditelja pom.xml, tako da podređeni moduli neće naslijediti određene biblioteke:
org.springframework proljeće-kontekst
Napokon, ako podređeni modul treba koristiti drugu verziju upravljane ovisnosti, možete nadjačati upravljanu verziju u djetetovoj pom.xml datoteka:
org.springframework opruga-jezgra 4.2.1.OSLOBOĐENJE
Imajte na umu da iako podređeni moduli nasljeđuju od svog nadređenog projekta, nadređeni projekt ne mora nužno imati nikakve module koje agregira. S druge strane, nadređeni projekt također može agregirati projekte koji ga ne nasljeđuju.
Za više informacija o nasljeđivanju i agregiranju pogledajte ovu dokumentaciju.
6.4. Ažuriranje podmodula i izrada projekta
Možemo promijeniti ambalaža vrsta svakog podmodula. Na primjer, promijenimo ambalaža od webapp modul za RAT ažuriranjem pom.xml datoteka:
rat
Sada možemo testirati izgradnju našeg projekta pomoću mvn čista instalacija naredba. Izlaz dnevnika Maven trebao bi biti sličan ovome:
[INFO] Skeniranje projekata ... [INFO] Redoslijed reaktora: [INFO] nadređeni projekt [INFO] jezgra [INFO] usluga [INFO] webapp // ............. [ INFO] ----------------------------------------- [INFO] Sažetak reaktora: [ INFO] ----------------------------------------- [INFO] nadređeni projekt. ................. USPJEH [2.041s] [INFO] jezgra ........................ .... USPJEH [4.802s] [INFO] usluga ......................... USPJEH [3.065s] [INFO] webapp ... ....................... USPJEH [6.125s] [INFO] ------------------- ----------------------
7. Zaključak
U ovom smo članku razgovarali o nekim popularnijim značajkama Apache Maven alata za izgradnju.
Svi primjeri koda na Baeldungu izrađeni su pomoću Mavena, tako da možete jednostavno provjeriti našu web stranicu GitHub projekta kako biste vidjeli razne konfiguracije Mavena.