Programiranje

Uvod v Maven 2

Maven je priljubljeno odprtokodno orodje za gradnjo za podjetniške projekte Java, zasnovano tako, da veliko dela vzame iz procesa gradnje. Maven uporablja deklarativni pristop, kjer sta opisani struktura in vsebina projekta, ne pa pristop, ki temelji na opravilih, na primer v Ant ali v tradicionalnih datotekah make. To pomaga uveljaviti razvojne standarde v celotnem podjetju in zmanjša čas, potreben za pisanje in vzdrževanje skriptov gradnje.

Deklarativni pristop, ki temelji na življenjskem ciklu, ki ga uporablja Maven 1, je za mnoge radikalen odmik od bolj tradicionalnih tehnik gradnje, Maven 2 pa gre v tem pogledu še dlje. V tem članku preučim nekaj osnovnih principov za Maven 2 in nato poiščem delovni primer. Začnimo s pregledom osnov Maven 2.

Projektni objektni model

Srce projekta Maven 2 je projektni objektni model (ali krajše POM). Vsebuje podroben opis vašega projekta, vključno z informacijami o upravljanju z različicami in konfiguracijo, odvisnostmi, viri aplikacij in preizkušanja, člani in strukturo ekipe ter še veliko več. POM je v obliki datoteke XML (pom.xml), ki se nahaja v domačem imeniku vašega projekta. Preprosta datoteka pom.xml je prikazana tukaj:

 4.0.0 com.javaworld.hotels HotelDatabase war 1.0-SNAPSHOT Maven Quick Start Archetype //maven.apache.org test junit junit 3.8.1 

Struktura imenika Maven 2

Velik del Mavenove moči izvira iz običajnih praks, ki jih spodbuja. Razvijalec, ki je že delal na projektu Maven, se bo takoj počutil seznanjen s strukturo in organizacijo novega. Časa ni treba izgubljati znova, da bi izumili strukture imenikov, konvencije in prilagojene skripte za gradnjo Ant za vsak projekt. Čeprav lahko katero koli določeno lokacijo imenika preglasite za svoje cilje, bi morali iz več razlogov resnično spoštovati standardno strukturo imenikov Maven 2, in sicer iz več razlogov:

  • Datoteka POM je manjša in enostavnejša
  • Projekt olajša razumevanje in olajša življenje revnemu človeku, ki mora ob odhodu vzdrževati projekt
  • Olajša integracijo vtičnikov

Standardna struktura imenika Maven 2 je prikazana na sliki 1. V domačem imeniku projekta gre POM (pom.xml) in dva podimenika: src za vso izvorno kodo in cilj za ustvarjene artefakte.

Imenik src ima več podimenikov, od katerih ima vsak jasno določen namen:

  • src / main / java: Vaša izvorna koda Java gre sem (čudno!)
  • src / main / resources: Drugi viri, ki jih potrebuje vaša aplikacija
  • src / main / filters: Filtri virov v obliki datotek z lastnostmi, ki se lahko uporabljajo za določanje spremenljivk, znanih le med izvajanjem
  • src / main / config: Konfiguracijske datoteke
  • src / main / webapp: Imenik spletne aplikacije za projekt WAR
  • src / test / java: Enotni testi
  • src / test / resources: Viri, ki se bodo uporabljali za enote, vendar ne bodo uporabljeni
  • src / test / filters: Filtri virov, ki se bodo uporabljali za enote, vendar ne bodo uvedeni
  • src / stran: Datoteke, uporabljene za ustvarjanje spletnega mesta projekta Maven

Projektni življenjski cikli

Življenjski cikli projektov so osrednjega pomena za Maven 2. Večina razvijalcev pozna pojem faz gradnje, kot so prevajanje, preizkušanje in uvajanje. Ant ima tarče z imeni, kot so taka. V Maven 1 se ustrezni vtičniki pokličejo neposredno. Za sestavljanje izvorne kode Java, na primer, java vtičnik se uporablja:

$ maven java: prevajanje

V Mavenu 2 je ta pojem standardiziran v sklop dobro znanih in natančno opredeljenih faz življenjskega cikla (glej sliko 2). Namesto da bi razvijal vtičnike, razvijalec Maven 2 prikliče fazo življenjskega cikla: $ mvn prevajanje.

Nekatere bolj uporabne faze življenjskega cikla Maven 2 so naslednje:

  • generiraj-vire: Ustvari kakršno koli dodatno izvorno kodo, potrebno za aplikacijo, kar se običajno izvede z ustreznimi vtičniki
  • sestavi: Sestavi izvorno kodo projekta
  • test-prevajanje: Sestavi preskuse enote projekta
  • preskus: Zažene preskuse enot (običajno z uporabo JUnit) v imeniku src / test
  • paket: Zapakira prevedeno kodo v njeno distribucijsko obliko (JAR, WAR itd.)
  • integracijski test: Paket po potrebi obdela in razporedi v okolje, kjer je mogoče izvajati teste integracije
  • namestite: Namesti paket v lokalno repozitorij za uporabo kot odvisnost pri drugih projektih na vašem lokalnem računalniku
  • razporediti: V okolju za integracijo ali izdajo kopira končni paket v oddaljeno repozitorij za skupno rabo z drugimi razvijalci in projekti

Na voljo so številne druge faze življenjskega cikla. Za več podrobnosti glejte Viri.

Te faze ponazarjajo prednosti priporočenih praks, ki jih spodbuja Maven 2: ko se razvijalec seznani z glavnimi fazami življenjskega cikla Maven 2, bi se moral počutiti sproščeno s fazami življenjskega cikla katerega koli projekta Maven.

Faza življenjskega cikla prikliče vtičnike, ki jih potrebuje za delo. Priklic faze življenjskega cikla samodejno prikliče tudi vse prejšnje faze življenjskega cikla. Ker so faze življenjskega cikla omejene, enostavne za razumevanje in dobro organizirane, je seznanjanje z življenjskim ciklom novega projekta Maven 2 enostavno.

Prehodne odvisnosti

Eden od vrhuncev Maven 2 je prehodno upravljanje odvisnosti. Če ste že kdaj uporabili orodje, kot je urpmi na Linuxu boste vedeli, kaj so prehodne odvisnosti. Z Maven 1 morate prijaviti vsak JAR, ki ga bo vaša prijava neposredno ali posredno potrebovala. Ali lahko na primer navedete JAR-je, ki jih potrebuje aplikacija Hibernate? Z Maven 2 vam ni treba. Samo povej Mavenu, katere knjižnice ti Maven bo poskrbel za knjižnice, ki jih potrebujejo vaše knjižnice (in tako naprej).

Recimo, da želite v svojem projektu uporabiti Hibernate. Preprosto bi dodali novo odvisnost odvisnosti odsek v pom.xml, kot sledi:

  hibernate hibernate 3.0.3 prevajanje 

In to je to! Ni vam treba loviti, da bi vedeli, v katerih drugih JAR-jih (in v katerih različicah) morate zagnati Hibernate 3.0.3; Maven bo to naredil namesto vas!

Struktura XML za odvisnosti v Mavenu 2 je podobna tisti, ki se uporablja v Mavenu 1. Glavna razlika je v Obseg tag, kar je razloženo v naslednjem razdelku.

Obseg odvisnosti

V resnični aplikaciji za podjetja vam morda ne bo treba vključiti vseh odvisnosti v postavljeno aplikacijo. Nekatere JAR-je potrebujete samo za enotno preskušanje, druge pa bo v času izvajanja zagotovil strežnik aplikacij. Z uporabo tehnike, imenovane obseg odvisnosti, Maven 2 vam omogoča uporabo nekaterih JAR-jev le takrat, ko jih resnično potrebujete, in jih izključi iz učne poti, ko jih ne potrebujete.

Maven ponuja štiri področja odvisnosti:

  • sestavi: Odvisnost od obsega prevajanja je na voljo v vseh fazah. To je privzeta vrednost.
  • pod pogojem: Navedena odvisnost se uporablja za prevajanje aplikacije, vendar je ne bo uvedeno. Ta obseg bi uporabili, ko pričakujete, da JDK ali strežnik aplikacij zagotovi JAR. Dober primer so API-ji za strežniške programčke.
  • čas izvajanja: Odvisnosti izvajalnega obsega niso potrebne za prevajanje, temveč samo za izvajanje, kot so gonilniki JDBC (Java Database Connectivity).
  • preskus: Odvisnosti od obsega preizkusa so potrebne samo za prevajanje in izvajanje preskusov (na primer JUnit).

Projektno komuniciranje

Pomemben del vsakega projekta je notranja komunikacija. Čeprav to ni srebrna krogla, lahko spletno mesto s centraliziranim tehničnim projektom močno izboljša prepoznavnost ekipe. Z minimalnimi napori lahko v zelo kratkem času začnete delovati s spletno stranjo profesionalne kakovosti.

To dobi popolnoma novo dimenzijo, ko je generacija spletnega mesta Maven integrirana v proces gradnje z uporabo neprekinjene integracije ali celo samodejnih nočnih graditev. Tipično spletno mesto Maven lahko dnevno objavlja:

  • Splošne informacije o projektu, kot so izvorna skladišča, sledenje napakam, člani ekipe itd.
  • Poročila o preskusu enote in poročilih
  • Samodejni pregledi kod in s Checkstyle in PMD
  • Informacije o konfiguraciji in različicah
  • Odvisnosti
  • Javadoc
  • Izvorna koda v indeksiranem in navzkrižno referenciranem HTML formatu
  • Seznam članov ekipe
  • In veliko več

Tudi tokrat bo vsak pametno razvit Maven takoj vedel, kam naj išče, da se seznani z novim projektom Maven 2.

Praktičen primer

Zdaj, ko smo videli nekaj osnovnih pojmov, uporabljenih v Mavenu 2, poglejmo, kako to deluje v resničnem svetu. Preostanek te vaje preučuje, kako bi uporabili Maven 2 za preprost projekt Java Enterprise Edition. Predstavitvena aplikacija vključuje namišljen (in poenostavljen) sistem hotelskih baz podatkov. Za predstavitev, kako Maven obravnava odvisnosti med projekti in komponentami, bo ta aplikacija zgrajena z uporabo dveh komponent (glej sliko 3):

  • Komponenta poslovne logike: HotelDatabase.jar
  • Komponenta spletne aplikacije: HotelWebApp.war

Lahko prenesete izvorno kodo, ki ji boste sledili skupaj z vadnico v virih.

Nastavite projektno okolje

Začnemo s konfiguracijo vašega delovnega okolja. V resničnih projektih boste pogosto morali definirati in konfigurirati okolje ali uporabniško določene parametre, ki ne bi smeli biti razdeljeni vsem uporabnikom. Če ste na primer za požarnim zidom s strežnikom proxy, morate konfigurirati nastavitve strežnika proxy, tako da lahko Maven prenaša JAR-je iz spletnih skladišč. Za uporabnike Maven 1 to naredijo datoteke build.properties in project.properties. V Mavenu 2 jih je nadomestila datoteka settings.xml, ki se nahaja v imeniku $ HOME / .m2. Tu je primer:

     http scott tiger 8080 my.proxy.url 

Ustvarite nov projekt z arhetipskim vtičnikom

Naslednji korak je ustvariti novo predlogo projekta Maven 2 za komponento poslovne logike. Maven 2 ponuja arhetip vtičnik, ki gradi prazno strukturo imenikov projektov, združljivo z Maven 2. Ta vtičnik se izkaže za primeren za hitro zagon osnovnega projektnega okolja. Privzeti model arhetipa bo ustvaril projekt knjižnice JAR. Za druge posebne vrste projektov je na voljo več drugih vrst artefaktov, vključno s spletnimi aplikacijami, vtičniki Maven in drugimi.

Za nastavitev projekta HotelDatabase.jar zaženite naslednji ukaz:

mvn arhetip: create -DgroupId = com.javaworld.hotels - DartifactId = HotelDatabase -Dpackagename = com.javaworld.hotels

Zdaj imate povsem novo strukturo imenikov projektov Maven 2. Preklopite na HotelDatabase imenik za nadaljevanje vadnice.

Izvajanje poslovne logike

Zdaj uvajamo poslovno logiko. The Hotel razred je preprost JavaBean. The HotelModel razred izvaja dve storitvi: findAvailableCities () metoda, ki navaja razpoložljiva mesta, in findHotelsByCity () metoda, ki navaja vse hotele v določenem mestu. Preprosta, na spominu osnovana izvedba HotelModel razred je predstavljen tukaj:

paket com.javaworld.hotels.model;

uvoz java.util.ArrayList; uvoz java.util.List;

import com.javaworld.hotels.businessobjects.Hotel;

javni razred HotelModel {

/ ** * Seznam vseh znanih mest v bazi. * / private static String [] places = {"Pariz", "London",}; / ** * Seznam vseh hotelov v bazi. * / zasebni statični hotel [] hoteli = {nov hotel ("Hotel Latin", "Quartier latin", "Paris", 3), nov hotel ("Hotel Etoile", "Place de l'Etoile", "Paris", 4), novi hotel ("Hotel Vendome", "Place Vendome", "Paris", 5), novi hotel ("Hotel Hilton", "Trafalgar Square", "London", 4), nov hotel ("Hotel Ibis" , "Mesto", "London", 3),}; / ** * Vrne hotele v določenem mestu. * @param city ime mesta * @vrni seznam hotelskih predmetov * / javni seznam findHotelsByCity (String city) {Seznam hotelsFound = new ArrayList (); za (Hotel hotel: hoteli) {if (hotel.getCity (). equalsIgnoreCase (mesto)) {hotelsFound.add (hotel); }} vrni hotelsFound; } / ** * Vrne seznam mest v bazi podatkov, ki imajo hotel. * @ vrni seznam imen mest * / public String [] findAvailableCities () {vrni mesta; }}

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