Maven je populárny nástroj na vytváranie otvorených zdrojov pre podnikové projekty Java, ktorý je navrhnutý tak, aby z procesu vytvárania odstránil väčšinu tvrdej práce. Maven používa deklaratívny prístup, kde je popísaná štruktúra a obsah projektu, a nie prístup založený na úlohách, ktorý sa používa napríklad v Ant alebo v tradičných make súboroch. To pomáha presadzovať vývojové štandardy pre celú spoločnosť a skracuje čas potrebný na písanie a údržbu skriptov na zostavenie.
Deklaratívny prístup založený na životnom cykle, ktorý používa Maven 1, je pre mnohých radikálnym odklonom od tradičnejších techník zostavovania a Maven 2 ide v tomto smere ešte ďalej. V tomto článku prechádzam niektorými základnými princípmi za Maven 2 a potom si ukážem pracovný príklad. Začnime preskúmaním základov hry Maven 2.
Objektový model projektu
Srdcom projektu Maven 2 je objektový model projektu (alebo skrátene POM). Obsahuje podrobný popis vášho projektu vrátane informácií o správe verzií a konfigurácii, závislostiach, zdrojoch aplikácií a testovaní, členoch tímu a štruktúre a oveľa viac. POM má formu súboru XML (pom.xml), ktorý je umiestnený v domovskom adresári projektu. Tu je zobrazený jednoduchý súbor pom.xml:
4.0.0 com.javaworld.hotels HotelDatabase war 1.0-SNAPSHOT Maven Rýchle spustenie Archetyp //maven.apache.org junit junit 3.8.1 test
Adresárová štruktúra Maven 2
Veľká časť sily Maven pochádza zo štandardných postupov, ktoré podporuje. Vývojár, ktorý predtým pracoval na projekte Maven, bude okamžite oboznámený so štruktúrou a organizáciou nového. Nemusíte zbytočne strácať čas objavovaním adresárových štruktúr, konvencií a prispôsobených skriptov na vytváranie Ant pre každý projekt. Aj keď môžete prepísať ktorékoľvek konkrétne umiestnenie adresára pre svoje konkrétne ciele, mali by ste skutočne čo najviac rešpektovať štandardnú štruktúru adresárov Maven 2, a to z niekoľkých dôvodov:
- Robí váš súbor POM menším a jednoduchším
- Uľahčuje pochopenie projektu a uľahčuje život chudobnému človeku, ktorý musí projekt udržiavať, keď odchádzate
- Uľahčuje integráciu doplnkov
Štandardná adresárová štruktúra Maven 2 je znázornená na obrázku 1. V domovskom adresári projektu prechádza POM (pom.xml) a dva podadresáre: src pre všetok zdrojový kód a cieľ pre generované artefakty.
Adresár src má množstvo podadresárov, z ktorých každý má jasne definovaný účel:
- src / main / java: Sem sa dostane váš zdrojový kód Java (napodiv!)
- src / main / resources: Ďalšie zdroje, ktoré vaša aplikácia potrebuje
- src / main / filtre: Filtre zdrojov vo forme súborov vlastností, ktoré možno použiť na definovanie premenných známych iba za behu programu
- src / main / config: Konfiguračné súbory
- src / main / webapp: Adresár webových aplikácií pre projekt WAR
- src / test / java: Jednotkové testy
- src / test / zdroje: Zdroje, ktoré sa majú použiť na testovanie jednotiek, ale nebudú sa nasadiť
- src / test / filtre: Filtre zdrojov, ktoré sa majú použiť na testovanie jednotiek, ale nebudú nasadené
- src / web: Súbory použité na generovanie webových stránok projektu Maven
Životné cykly projektu
Životné cykly projektu sú pre program Maven 2. Ústredným bodom programu Maven 2. Väčšina vývojárov je oboznámená s pojmom fázy zostavovania, ako je kompilácia, testovanie a nasadenie. Ant má ciele s takými menami. V Maven 1 sa príslušné doplnky nazývajú priamo. Na kompiláciu zdrojového kódu Java napríklad java
používa sa doplnok:
$ maven java: kompilovať
V Mavene 2 je tento pojem štandardizovaný do súboru známych a dobre definovaných fáz životného cyklu (pozri obrázok 2). Namiesto vyvolávania doplnkov vyvoláva vývojár Maven 2 fázu životného cyklu: kompilácia $ mvn
.
Niektoré z užitočnejších fáz životného cyklu Maven 2 sú nasledujúce:
generovať zdroje
: Generuje akýkoľvek ďalší zdrojový kód potrebný pre aplikáciu, čo sa zvyčajne dosahuje použitím vhodných doplnkovzostaviť
: Zkompiluje zdrojový kód projektutest-zostaviť
: Zostavuje testy projektových jednotiektest
: Spustí testy jednotky (zvyčajne pomocou JUnit) v adresári src / testbalíček
: Zbalí kompilovaný kód do jeho distribuovateľného formátu (JAR, WAR atď.)integračný test
: Spracuje a v prípade potreby nasadí balík do prostredia, kde je možné spustiť integračné testyInštalácia
: Nainštaluje balík do miestneho úložiska na použitie ako závislosť v iných projektoch na vašom lokálnom počítačinasadiť
: Vykonané v integračnom alebo vydávacom prostredí, skopíruje finálny balík do vzdialeného úložiska na zdieľanie s ďalšími vývojármi a projektmi
K dispozícii je mnoho ďalších fáz životného cyklu. Ďalšie informácie nájdete v zdrojoch.
Tieto fázy ilustrujú výhody odporúčaných postupov podporovaných programom Maven 2: keď je vývojár oboznámený s hlavnými fázami životného cyklu Maven 2, mal by sa cítiť v pohode s fázami životného cyklu každého projektu Maven.
Fáza životného cyklu vyvoláva doplnky, ktoré potrebuje na vykonanie svojej práce. Vyvolanie fázy životného cyklu automaticky vyvolá aj všetky predchádzajúce fázy životného cyklu. Pretože počet fáz životného cyklu je obmedzený, ľahko pochopiteľný a dobre organizovaný, oboznámenie sa s životným cyklom nového projektu Maven 2 je ľahké.
Tranzitívne závislosti
Jedným z vrcholov Maven 2 je tranzitívna správa závislostí. Ak ste niekedy používali nástroj ako urpmi v systéme Linux budete vedieť, čo sú tranzitívne závislosti. S Maven 1 musíte deklarovať každý JAR, ktorý bude vaša aplikácia priamo alebo nepriamo potrebovať. Môžete napríklad uviesť zoznam JAR, ktoré aplikácia Hibernate vyžaduje? S Maven 2 nemusíte. Len povieš Mavenovi, ktoré knižnice ty a Maven sa postará o knižnice, ktoré vaše knižnice potrebujú (a tak ďalej).
Predpokladajme, že chcete vo svojom projekte použiť režim dlhodobého spánku. Jednoducho by ste pridali novú závislosť do závislosti
časť v pom.xml, a to nasledovne:
prezimovať prezimovať 3.0.3 kompilovať
A je to! Nemusíte loviť, aby ste vedeli, v ktorých ďalších JAR (a v ktorých verziách) musíte spustiť Hibernate 3.0.3; Maven to urobí za vás!
Štruktúra XML pre závislosti v Maven 2 je podobná štruktúre použitej v Maven 1. Hlavný rozdiel je rozsah
tag, ktorý je vysvetlený v nasledujúcej časti.
Rozsahy závislostí
V podnikovej aplikácii v reálnom svete nemusí byť potrebné zahrnúť všetky závislosti do nasadenej aplikácie. Niektoré súbory JAR sú potrebné iba na testovanie jednotiek, zatiaľ čo iné ich za behu poskytne aplikačný server. Pomocou techniky tzv rozsah závislostíMaven 2 vám umožňuje používať určité súbory JAR iba vtedy, keď ich skutočne potrebujete, a vylúči ich z cesty triedy, ak to tak nie je.
Maven poskytuje štyri rozsahy závislostí:
zostaviť
: Závislosť kompilačného rozsahu je k dispozícii vo všetkých fázach. Toto je predvolená hodnota.za predpokladu
: Na zostavenie aplikácie sa používa poskytnutá závislosť, ale nebude sa nasadiť. Tento rozsah by ste použili, keď očakávate, že JAR alebo aplikačný server poskytne JAR. Dobrým príkladom sú servletové API.beh programu
: Závislosti runtime rozsahu nie sú potrebné na kompiláciu, iba na vykonávanie, napríklad ovládače JDBC (Java Database Connectivity).test
: Závislosti testovacieho rozsahu sú potrebné iba na kompiláciu a spustenie testov (napríklad JUnit).
Komunikácia projektu
Dôležitou súčasťou každého projektu je interná komunikácia. Aj keď nejde o striebornú guľku, centralizovaná webová stránka technického projektu môže prejsť dlhú cestu k zlepšeniu viditeľnosti v tíme. S minimálnym úsilím môžete spustiť webovú stránku projektu v profesionálnej kvalite za veľmi krátky čas.
To vyžaduje úplne nový rozmer, keď je generovanie stránok Maven integrované do procesu vytvárania pomocou nepretržitej integrácie alebo dokonca automatických nočných vytváraní. Typická stránka Maven môže každý deň zverejňovať:
- Všeobecné informácie o projekte, ako sú úložiská zdrojov, sledovanie chýb, členovia tímu atď.
- Jednotkové testy a správy o pokrytí testov
- Automatické kontroly kódu a s Checkstyle a PMD
- Informácie o konfigurácii a verziách
- Závislosti
- Javadoc
- Zdrojový kód v indexovanom a krížovo odkazovanom formáte HTML
- Zoznam členov tímu
- A oveľa viac
Každý vývojársky zameraný na Maven bude opäť okamžite vedieť, kde hľadať, aby sa oboznámil s novým projektom Maven 2.
Praktický príklad
Teraz, keď sme videli niekoľko základných pojmov používaných v Mavene 2, pozrime sa, ako to funguje v skutočnom svete. Zvyšok tohto tutoriálu skúma, ako by sme použili Maven 2 na jednoduchý projekt Java Enterprise Edition. Demo aplikácia obsahuje imaginárny (a zjednodušený) databázový systém hotelov. Na demonštráciu toho, ako Maven spracováva závislosti medzi projektmi a komponentmi, bude táto aplikácia zostavená z dvoch komponentov (pozri obrázok 3):
- Komponent obchodnej logiky: HotelDatabase.jar
- Komponent webovej aplikácie: HotelWebApp.war
Môžete si stiahnuť zdrojový kód, ktorý bude nasledovať spolu s príručkou v časti Zdroje.
Nastavte prostredie svojho projektu
Začíname konfiguráciou vášho pracovného prostredia. V projektoch v reálnom svete budete často musieť definovať a nakonfigurovať prostredie alebo parametre špecifické pre používateľa, ktoré by sa nemali distribuovať všetkým používateľom. Ak napríklad pracujete za bránou firewall s proxy serverom, musíte nakonfigurovať nastavenia proxy servera, aby mohol Maven sťahovať súbory JAR z archívov na webe. Pre používateľov Maven 1 túto prácu robia súbory build.properties a project.properties. V Maven 2 ich nahradil súbor settings.xml, ktorý sa nachádza v adresári $ HOME / .m2. Tu je príklad:
http scott tiger 8080 my.proxy.url
Vytvorte nový projekt pomocou doplnku archetypu
Ďalším krokom je vytvorenie novej šablóny projektu Maven 2 pre komponent obchodnej logiky. Maven 2 poskytuje archetyp
doplnok, ktorý vytvára prázdnu adresárovú štruktúru projektu kompatibilnú s Maven 2. Tento doplnok sa osvedčil ako vhodný prostriedok na rýchle uvedenie základného prostredia projektu do prevádzky. Predvolený model archetypu vytvorí projekt knižnice JAR. Pre ďalšie konkrétne typy projektov je k dispozícii niekoľko ďalších typov artefaktov, vrátane webových aplikácií, doplnkov Maven a ďalších.
Spustením nasledujúceho príkazu nastavte svoj projekt HotelDatabase.jar:
archív typu mvn: create -DgroupId = com.javaworld.hotels - DartifactId = HotelDatabase -Dpackagename = com.javaworld.hotels
Teraz máte úplne novú štruktúru adresárov projektu Maven 2. Prepnite na ikonu HotelDatabase
adresára pokračovať v návode.
Implementácia obchodnej logiky
Teraz implementujeme obchodnú logiku. The Hotel
trieda je jednoduchý JavaBean. The HotelModel
trieda implementuje dve služby: findAvailableCities ()
metóda, ktorá uvádza dostupné mestá, a findHotelsByCity ()
metóda, ktorá obsahuje zoznam všetkých hotelov v danom meste. Jednoduchá implementácia HotelModel
trieda je uvedená tu:
balíček com.javaworld.hotels.model;
import java.util.ArrayList; import java.util.List;
import com.javaworld.hotels.businessobjects.Hotel;
verejná trieda HotelModel {
/ ** * Zoznam všetkých známych miest v databáze. * / private static String [] cities = {"Paris", "London",}; / ** * Zoznam všetkých hotelov v databáze. * / private static Hotel [] hotels = {new Hotel ("Hotel Latin", "Quartier latin", "Paris", 3), new Hotel ("Hotel Etoile", "Place de l'Etoile", "Paris", 4), nový hotel („Hotel Vendome“, „Place Vendome“, „Paríž“, 5), nový hotel („Hotel Hilton“, „Trafalgar Square“, „Londýn“, 4), nový hotel („Hotel Ibis“ , „Mesto“, „Londýn“, 3),}; / ** * Vráti hotely v danom meste. * @param city názov mesta * @return zoznam hotelových objektov * / public List findHotelsByCity (mesto reťazca) {List hotelsFound = new ArrayList (); pre (Hotel hotel: hotely) {if (hotel.getCity (). equalsIgnoreCase (mesto)) {hotelsFound.add (hotel); }} spať hotelsFound; } / ** * Vráti zoznam miest v databáze, ktoré majú hotel. * @return a zoznam mien miest * / public String [] findAvailableCities () {návratové mestá; }}