Programavimas

Įžanga į „Maven 2“

„Maven“ yra populiarus atvirojo kodo kūrimo įrankis, skirtas „Java“ projektams kurti, sukurtas siekiant atimti daug sunkaus darbo iš kūrimo proceso. Mavenas naudoja deklaratyvų metodą, kai aprašoma projekto struktūra ir turinys, o ne užduotimi pagrįstą metodą, naudojamą „Ant“ ar tradiciniuose „make“ failuose. Tai padeda įgyvendinti visos įmonės plėtros standartus ir sutrumpina laiką, reikalingą kurti scenarijus ir kurti juos.

Deklaratyvus, gyvenimo ciklo principu pagrįstas metodas, kurį naudoja „Maven 1“, daugeliui yra radikalus nukrypimas nuo tradiciškesnių konstravimo būdų, o „Maven 2“ šiuo klausimu eina dar toliau. Šiame straipsnyje aš apžvelgiu keletą pagrindinių „Maven 2“ vadovų ir tada pateikiu pavyzdį. Pradėkime nuo „Maven 2“ pagrindų peržiūros.

Projekto objekto modelis

„Maven 2“ projekto esmė yra projekto objekto modelis (arba trumpiau POM). Jame yra išsamus jūsų projekto aprašymas, įskaitant informaciją apie versijų ir konfigūracijos valdymą, priklausomybes, programų ir testavimo išteklius, komandos narius ir struktūrą ir daug daugiau. POM yra XML failo forma (pom.xml), kuris yra jūsų projekto pagrindiniame kataloge. Čia rodomas paprastas pom.xml failas:

 4.0.0 com.javaworld.hotels „HotelDatabase war 1.0-SNAPSHOT Maven“ greito pradžios archetipas //maven.apache.org junit junit 3.8.1 testas 

„Maven 2“ katalogo struktūra

Didžiąją Mavenio galios dalį suteikia jo skatinamos standartinės praktikos. Kūrėjas, anksčiau dirbęs prie „Maven“ projekto, iškart pajus naujojo struktūrą ir organizavimą. Nereikia gaišti laiko sugalvojant katalogų struktūras, konvencijas ir kiekvienam projektui pritaikytus skruzdžių kūrimo scenarijus. Nors galite nepaisyti bet kurios konkrečios katalogo vietos savo tikslams, turėtumėte kiek įmanoma labiau atsižvelgti į standartinę „Maven 2“ katalogų struktūrą dėl kelių priežasčių:

  • Tai daro jūsų POM failą mažesnį ir paprastesnį
  • Tai palengvina projekto supratimą ir palengvina vargšo vaikino, kuris privalo išlaikyti projektą, kai jūs paliekate, gyvenimą
  • Tai palengvina papildinių integravimą

Standartinė „Maven 2“ katalogų struktūra pavaizduota 1 paveiksle. Projekto pagrindiniame kataloge eina POM (pom.xml) ir du pakatalogiai: src visam šaltinio kodui ir taikinys sugeneruotiems artefaktams.

Kataloge „src“ yra keletas pakatalogių, kurių kiekvienas turi aiškiai apibrėžtą tikslą:

  • src / main / java: Čia yra jūsų „Java“ šaltinio kodas (kaip bebūtų keista!)
  • src / main / resources: Kiti jūsų programai reikalingi ištekliai
  • src / main / filtrai: Išteklių filtrai ypatybių failų pavidalu, kurie gali būti naudojami apibrėžiant kintamuosius, žinomus tik vykdymo metu
  • src / main / config: Konfigūracijos failai
  • src / main / webapp: WAR projekto žiniatinklio programų katalogas
  • src / test / java: Vieneto bandymai
  • src / testas / ištekliai: Ištekliai, kurie bus naudojami vieneto bandymams atlikti, tačiau nebus naudojami
  • src / testas / filtrai: Išteklių filtrai, naudojami bandymams atlikti, bet nebus diegiami
  • src / site: Failai, naudojami kuriant „Maven“ projekto svetainę

Projekto gyvavimo ciklai

Projekto gyvavimo ciklas yra pagrindinis „Maven 2“ elementas. Daugelis kūrėjų žino statybos etapų, tokių kaip kompiliavimas, testavimas ir diegimas, sąvoką. Skruzdė turi taikinius su tokiais vardais. „Maven 1“ atitinkami papildiniai iškviečiami tiesiogiai. Pavyzdžiui, norėdami sudaryti „Java“ šaltinio kodą, java naudojamas papildinys:

$ maven java: sudaryti

„Maven 2“ versijoje ši sąvoka yra standartizuota į gerai žinomų ir gerai apibrėžtų gyvavimo ciklo fazių rinkinį (žr. 2 pav.). Užuot iškvietęs papildinius, „Maven 2“ kūrėjas naudoja gyvenimo ciklo etapą: sudaryti $ mvn.

Keletas naudingesnių „Maven 2“ gyvavimo ciklo etapų yra šie:

  • generuoti-šaltinius: Generuoja bet kokį papildomą programai reikalingą šaltinio kodą, kuris paprastai atliekamas naudojant atitinkamus papildinius
  • sudaryti: Sudaro projekto šaltinio kodą
  • testas-kompiliavimas: Sudaro projekto vieneto testus
  • testas: Atlieka vieneto testus (paprastai naudojant JUnit) src / test kataloge
  • pakuotė: Sudeda sukurtą kodą platinamu formatu (JAR, WAR ir kt.)
  • integracijos testas: Apdoroja ir prireikus įdiegia paketą į aplinką, kurioje galima vykdyti integracijos testus
  • diegti: Įdiegia paketą į vietinę saugyklą, kad būtų galima naudoti kaip priklausomybę nuo kitų jūsų vietinės mašinos projektų
  • dislokuoti: Atlikta integravimo ar išleidimo aplinkoje, nukopijuoja galutinį paketą į nuotolinę saugyklą, kad būtų galima dalytis su kitais kūrėjais ir projektais

Yra daugybė kitų gyvavimo ciklo etapų. Daugiau informacijos žr. Ištekliai.

Šie etapai iliustruoja „Maven 2“ skatinamos rekomenduojamos praktikos naudą: kai kūrėjas susipažįsta su pagrindiniais „Maven 2“ gyvavimo ciklo etapais, jis turėtų jaustis laisvai su bet kokio „Maven“ projekto gyvavimo ciklo etapais.

Gyvavimo ciklo fazė iškviečia papildinius, kurių reikia darbui atlikti. Iškviečiant gyvenimo ciklo fazę, automatiškai iškviečiamos ir visos ankstesnės gyvavimo ciklo fazės. Kadangi gyvavimo ciklo etapai yra riboti, lengvai suprantami ir gerai organizuoti, lengva susipažinti su naujo „Maven 2“ projekto gyvavimo ciklu.

Transityviosios priklausomybės

Vienas svarbiausių „Maven 2“ akcentų yra tranzityvios priklausomybės valdymas. Jei kada nors naudojote įrankį, pvz urpmi „Linux“ dėžutėje žinosite, kokios yra transityviosios priklausomybės. Naudodamiesi „Maven 1“ turite deklaruoti kiekvieną JAR, kurio tiesiogiai ar netiesiogiai reikės jūsų programai. Pavyzdžiui, ar galite išvardyti JAR, reikalingus užmigdymo programai? Su „Maven 2“ jums nereikia. Jūs tiesiog pasakykite Mavenui, kurios bibliotekos tu reikia, o Mavenas pasirūpins bibliotekomis, kurių reikia jūsų bibliotekoms (ir pan.).

Tarkime, kad savo projekte norite naudoti užmigdymo režimą. Jūs tiesiog pridėtumėte naują priklausomybę priklausomybės skyriuje pom.xml taip:

  hibernate hibernate 3.0.3 kompile 

Štai ir viskas! Jums nereikia medžioti, kad žinotumėte, kuriuose kituose JAR (ir kuriose versijose) turite paleisti „Hibernate 3.0.3“; Maven tai padarys už jus!

„Maven 2“ priklausomybių XML struktūra yra panaši į tą, kuri naudojama „Maven 1“. Pagrindinis skirtumas yra tas taikymo sritį žymą, kuri paaiškinta kitame skyriuje.

Priklausomybės apimtis

Realioje įmonės programoje gali tekti neįtraukti visų priklausomybių į diegiamą programą. Kai kurie JAR reikalingi tik bandant vienetus, o kitus vykdymo metu pateiks programų serveris. Naudojant vadinamą techniką priklausomybės apimties nustatymas, „Maven 2“ leidžia naudoti tam tikrus JAR tik tada, kai jų jums tikrai reikia, ir pašalina juos iš klasės kelio, kai to nereikia.

Mavenas pateikia keturis priklausomybės sritis:

  • sudaryti: Kompiliavimo apimties priklausomybė yra prieinama visuose etapuose. Tai yra numatytoji reikšmė.
  • jeigu: Pateikta priklausomybė naudojama programai kompiliuoti, tačiau nebus įdiegta. Šią sritį naudosite, kai tikitės, kad JDK arba programų serveris pateikia JAR. „Servlet“ API yra geras pavyzdys.
  • vykdymo laikas: Kompiliacijai nereikia vykdymo laiko apimties priklausomybių, tik vykdant, pvz., JDBC („Java Database Connectivity“) tvarkykles.
  • testas: Testo apimties priklausomybės reikalingos tik norint sudaryti ir vykdyti testus (pvz., „JUnit“).

Projekto komunikacija

Svarbi bet kurio projekto dalis yra vidinė komunikacija. Nors tai nėra sidabrinė kulka, centralizuoto techninio projekto svetainė gali labai padėti pagerinti matomumą komandoje. Turėdami minimalias pastangas, galite sukurti ir paleisti profesionalios kokybės projektą „Svetainė“ per labai mažai laiko.

Tai įgauna visiškai naują aspektą, kai „Maven“ svetainės karta integruojama į kūrimo procesą, naudojant nuolatinę integraciją ar net automatinius naktinius kūrimus. Tipiška „Maven“ svetainė kasdien gali skelbti:

  • Bendroji informacija apie projektą, pvz., Šaltinių saugyklos, defektų sekimas, komandos nariai ir kt.
  • Vieneto bandymo ir bandymo aprėpties ataskaitos
  • Automatinis kodo peržiūra ir su „Checkstyle“ bei PMD
  • Konfigūracijos ir versijų informacija
  • Priklausomybės
  • Javadoc
  • Šaltinio kodas indeksuotu ir kryžminiu HTML formatu
  • Komandos narių sąrašas
  • Ir daug daugiau

Vėlgi, bet kuris „Maven“ išmanantis kūrėjas iškart žinos, kur ieškoti, kad susipažintų su nauju „Maven 2“ projektu.

Praktinis pavyzdys

Dabar, kai pamatėme keletą pagrindinių „Maven 2“ naudojamų sąvokų, pažiūrėkime, kaip tai veikia realiame pasaulyje. Likusioje šios pamokos dalyje nagrinėjama, kaip mes naudosime „Maven 2“ paprastame „Java Enterprise Edition“ projekte. Demonstracinė programa apima įsivaizduojamą (ir supaprastintą) viešbučių duomenų bazių sistemą. Norėdami parodyti, kaip „Maven“ tvarko priklausomybę tarp projektų ir komponentų, ši programa bus sukurta naudojant du komponentus (žr. 3 pav.):

  • Verslo logikos komponentas: HotelDatabase.jar
  • Žiniatinklio programų komponentas: HotelWebApp.war

Galite atsisiųsti šaltinio kodą, kad galėtumėte sekti kartu su „Resursų“ pamoka.

Susikurkite savo projekto aplinką

Mes pradedame nuo jūsų darbo aplinkos konfigūravimo. Realiuose projektuose dažnai reikės apibrėžti ir sukonfigūruoti konkrečiai aplinkai ar vartotojui skirtus parametrus, kurie neturėtų būti platinami visiems vartotojams. Pavyzdžiui, jei esate už ugniasienės su tarpiniu serveriu, turite sukonfigūruoti tarpinio serverio nustatymus, kad „Maven“ galėtų atsisiųsti JAR iš žiniatinklio saugyklų. „Maven 1“ vartotojams šį darbą atlieka failai „build.properties“ ir „project.properties“. „Maven 2“ juos pakeitė failas „settings.xml“, kuris eina į katalogą $ HOME / .m2. Štai pavyzdys:

     http scott tiger 8080 my.proxy.url 

Sukurkite naują projektą naudodami archetipo papildinį

Kitas žingsnis - sukurti naują „Maven 2“ projekto šabloną verslo logikos komponentui. „Maven 2“ pateikia archetipas papildinys, kuris sukuria tuščią su „Maven 2“ suderinamą projekto katalogų struktūrą. Šis papildinys yra patogus norint greitai sukurti ir paleisti pagrindinę projekto aplinką. Pagal numatytąjį archetipo modelį bus sukurtas JAR bibliotekos projektas. Galimi keli kiti artefaktų tipai kitiems konkretiems projektų tipams, įskaitant žiniatinklio programas, „Maven“ papildinius ir kitus.

Norėdami nustatyti „HotelDatabase.jar“ projektą, vykdykite šią komandą:

mvn archetipas: sukurti -DgroupId = com.javaworld.hotels - DartifactId = HotelDatabase -Dpackagename = com.javaworld.hotels

Dabar jūs turite visiškai naują „Maven 2“ projekto katalogo struktūrą. Perjunkite į „HotelDatabase“ katalogą, kad galėtumėte tęsti pamoką.

Verslo logikos įgyvendinimas

Dabar mes įgyvendiname verslo logiką. Viešbutis klasė yra paprastas „JavaBean“. ViešbutisModelis klasė vykdo dvi paslaugas: findAvailableCities () metodas, kuriame išvardyti galimi miestai, ir findHotelsByCity () metodas, kuriame išvardijami visi tam tikro miesto viešbučiai. Paprastas, atmintimi pagrįstas ViešbutisModelis klasė pristatoma čia:

paketas com.javaworld.hotels.model;

importuoti java.util.ArrayList; importuoti java.util.List;

importuoti „com.javaworld.hotels.businessobjects.Hotel“;

viešosios klasės „HotelModel“

/ ** * Visų žinomų miestų sąrašas duomenų bazėje. * / privatūs statiniai styginiai [] miestai = {"Paryžius", "Londonas",}; / ** * Visų duomenų bazėje esančių viešbučių sąrašas. * / privatus statinis viešbutis [] viešbučiai = {naujas viešbutis ("Hotel Latin", "Quartier latin", "Paryžius", 3), naujas viešbutis ("Hotel Etoile", "Place de l'Etoile", "Paryžius", 4), naujas viešbutis („Hotel Vendome“, „Place Vendome“, „Paryžius“, 5), naujas viešbutis („Hotel Hilton“, „Trafalgaro aikštė“, „London“, 4), naujas viešbutis („Hotel Ibis“ , „The City“, „London“, 3),}; / ** * Grąžina viešbučius tam tikrame mieste. * @param city miesto pavadinimas * @grąžinti viešbučio objektų sąrašą * / public list findHotelsByCity (String city) {List hotelsFound = new ArrayList (); už (Viešbučio viešbutis: viešbučiai) {if (hotel.getCity (). equalsIgnoreCase (miestas)) {hotelsFound.add (viešbutis); }} grįžtantys viešbučiaiRasta; } / ** * pateikia duomenų bazėje esančių miestų, kuriuose yra viešbutis, sąrašą. * @ grąžinti miestų pavadinimų sąrašą * / public String [] findAvailableCities () {miestai grįžti; }}

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