Ohjelmointi

Johdanto Maven 2: een

Maven on suosittu avoimen lähdekoodin rakennustyökalu yritys Java-projekteille, joka on suunniteltu poistamaan suuri osa kovasta työstä rakennusprosessista. Maven käyttää deklaratiivista lähestymistapaa, jossa projektirakenne ja sisältö kuvataan, pikemminkin kuin tehtävälähtöinen lähestymistapa, jota käytetään esimerkiksi Antissa tai perinteisissä tiedostotiedostoissa. Tämä auttaa noudattamaan yrityksen laajuisia kehitystandardeja ja lyhentää rakennuskoodien kirjoittamiseen ja ylläpitoon tarvittavaa aikaa.

Maven 1: n käyttämä deklaratiivinen, elinkaaripohjainen lähestymistapa on monille radikaali ero perinteisemmistä rakennustekniikoista, ja Maven 2 menee tältä osin vielä pidemmälle. Tässä artikkelissa käyn läpi joitain Maven 2: n takana olevia päämiehiä ja sitten läpi toimivan esimerkin. Aloitetaan tarkistamalla Maven 2: n perusteet.

Projektiobjektimalli

Maven 2 -projektin sydän on projektiobjektimalli (tai lyhyesti POM). Se sisältää yksityiskohtaisen kuvauksen projektistasi, mukaan lukien tiedot versioinnista ja kokoonpanon hallinnasta, riippuvuuksista, sovellus- ja testausresursseista, tiimin jäsenistä ja rakenteesta ja paljon muuta. POM on XML-tiedosto (pom.xml), joka on sijoitettu projektisi kotihakemistoon. Yksinkertainen pom.xml-tiedosto näkyy tässä:

 4.0.0 com.javaworld.hotels HotelDatabase war 1.0-SNAPSHOT Maven -pika-alkuarhotyyppi //maven.apache.org junit junit 3.8.1 -testi 

Maven 2 -hakemistorakenne

Suuri osa Mavenin voimasta tulee tavanomaisista käytännöistä, joita se kannustaa. Kehittäjä, joka on aiemmin työskennellyt Maven-projektissa, tuntee heti uuden rakenteen ja organisaation. Aikaa ei tarvitse hukata hakemalla uudelleen hakemistorakenteita, käytäntöjä ja räätälöityjä Ant-rakennuskomentosarjaa jokaiselle projektille. Vaikka voit ohittaa minkä tahansa tietyn hakemiston sijainnin omille tarkoituksillesi, sinun on todella kunnioitettava Maven 2 -hakemistorakennetta mahdollisimman paljon useista syistä:

  • Se tekee POM-tiedostostasi pienemmän ja yksinkertaisemman
  • Se helpottaa projektin ymmärtämistä ja helpottaa köyhän miehen elämää, jonka on ylläpidettävä projektia, kun lähdet
  • Se helpottaa laajennusten integrointia

Standardi Maven 2 -hakemistorakenne on esitetty kuvassa 1. Projektin kotihakemistossa menee POM (pom.xml) ja kaksi alihakemistoa: src kaikille lähdekoodeille ja kohde luotuille artefakteille.

Src-hakemistossa on useita alihakemistoja, joista jokaisella on selvästi määritelty tarkoitus:

  • src / main / java: Java-lähdekoodisi menee tänne (oudosti!)
  • src / main / resources: Muut sovelluksesi tarvitsemat resurssit
  • src / main / suodattimet: Resurssisuodattimet ominaisuustiedostojen muodossa, joita voidaan käyttää vain ajon aikana tunnettujen muuttujien määrittelemiseen
  • src / main / config: Kokoonpanotiedostot
  • src / main / webapp: WAR-projektin verkkosovellushakemisto
  • src / test / java: Yksikkötestit
  • src / test / resources: Resursseja käytetään yksikkötesteihin, mutta niitä ei käytetä
  • src / testi / suodattimet: Resurssisuodattimet, joita käytetään yksikötesteissä, mutta niitä ei käytetä
  • src / site: Maven-projektin verkkosivuston luomiseen käytetyt tiedostot

Projektin elinkaaret

Projektin elinkaaret ovat keskeisiä Maven 2: lle. Useimmat kehittäjät tuntevat rakennusvaiheiden käsitteen, kuten kääntäminen, testaus ja käyttöönotto. Muurahaisella on kohteita, joilla on samanlaisia ​​nimiä. Maven 1: ssä vastaavia laajennuksia kutsutaan suoraan. Esimerkiksi Java-lähdekoodin kokoamiseksi java laajennusta käytetään:

$ maven java: koota

Maven 2: ssa tämä käsite on standardoitu joukoksi tunnettuja ja hyvin määriteltyjä elinkaarivaiheita (katso kuva 2). Laajennusten käyttämisen sijaan Maven 2 -kehittäjä vetoaa elinkaarivaiheeseen: $ mvn kääntää.

Jotkut hyödyllisemmistä Maven 2: n elinkaarivaiheista ovat seuraavat:

  • generoida lähteitä: Luo sovellukselle tarvittavan ylimääräisen lähdekoodin, joka suoritetaan yleensä sopivilla laajennuksilla
  • koota: Kokoaa projektin lähdekoodin
  • testi-koota: Kokoa projektiyksikötestit
  • testata: Suorittaa yksikötestit (tyypillisesti käyttäen JUnit-sovellusta) src / test-hakemistossa
  • paketti: Pakkaa käännetyn koodin jakelukelpoiseen muotoonsa (JAR, WAR jne.)
  • integraatiotesti: Käsittelee ja käyttää pakettia tarvittaessa ympäristössä, jossa integraatiotestit voidaan suorittaa
  • Asentaa: Asentaa paketin paikalliseen arkistoon käytettäväksi riippuvuutena muista paikallisen koneesi projekteista
  • ottaa käyttöön: Valmis integrointi- tai julkaisuympäristössä, kopioi lopullisen paketin etätietovarastoon jakamista muiden kehittäjien ja projektien kanssa

Saatavilla on monia muita elinkaarivaiheita. Katso lisätietoja Resursseista.

Nämä vaiheet kuvaavat Maven 2: n suosittelemien suositeltujen käytäntöjen etuja: Kun kehittäjä tuntee Maven 2: n tärkeimmät elinkaarivaiheet, hänen tulisi tuntea olonsa mukavaksi minkä tahansa Maven-projektin elinkaarivaiheissa.

Elinkaarivaihe kutsuu laajennukset, joita se tarvitsee työn tekemiseen. Elinkaarivaiheen kutsuminen kutsuu automaattisesti myös kaikki aiemmat elinkaarivaiheet. Koska elinkaarivaiheiden määrä on rajallinen, helppo ymmärtää ja hyvin järjestetty, uuden Maven 2 -projektin elinkaaren tunteminen on helppoa.

Transitiiviset riippuvuudet

Yksi Maven 2: n kohokohdista on transitiivisen riippuvuuden hallinta. Jos olet koskaan käyttänyt työkalua, kuten urpmi Linux-laatikossa tiedät mitä transitiiviset riippuvuudet ovat. Maven 1: n kanssa sinun on ilmoitettava jokainen JAR, jota hakemuksesi tarvitsee suoraan tai epäsuorasti. Voitko esimerkiksi luetella horrostilan sovelluksen tarvitsemat JAR-tiedostot? Maven 2: n kanssa sinun ei tarvitse. Kerro vain Mavenille, mitkä kirjastot sinä tarvitsevat, ja Maven huolehtii kirjastosi tarvitsemista kirjastoista (ja niin edelleen).

Oletetaan, että haluat käyttää horrostilaa projektissasi. Lisäät yksinkertaisesti uuden riippuvuuden riippuvuudet pom.xml -osiossa seuraavasti:

  horrostila lepotila 3.0.3 kääntää 

Ja siinä se! Sinun ei tarvitse metsästää, jotta tiedät, missä muissa JAR-tiedostoissa (ja missä versioissa) sinun on suoritettava horrostila 3.0.3; Maven tekee sen puolestasi!

Maven 2: n riippuvuuksien XML-rakenne on samanlainen kuin Maven 1: ssä. Tärkein ero on soveltamisala -tunniste, joka selitetään seuraavassa osassa.

Riippuvuusalueet

Todellisessa yrityssovelluksessa sinun ei ehkä tarvitse sisällyttää kaikkia riippuvuuksia käyttöönotettuun sovellukseen. Joitakin JAR-tiedostoja tarvitaan vain yksikötestaukseen, kun taas toiset toimitetaan ajon aikana sovelluspalvelimella. Käyttämällä tekniikkaa nimeltä riippuvuuden laajuus, Maven 2 antaa sinun käyttää tiettyjä JAR-tiedostoja vain, kun todella tarvitset niitä, ja sulkee ne pois luokkatiedeltä, kun et.

Maven tarjoaa neljä riippuvuusalaa:

  • koota: Käännösalueen riippuvuus on käytettävissä kaikissa vaiheissa. Tämä on oletusarvo.
  • tarjotaan: Annettua riippuvuutta käytetään sovelluksen kääntämiseen, mutta sitä ei käytetä. Käytä tätä laajuutta, kun oletat JDK: n tai sovelluspalvelimen toimittavan JAR: n. Servlet-sovellusliittymät ovat hyvä esimerkki.
  • ajonaikainen: Ajonaikaisen laajuuden riippuvuuksia ei tarvita kokoamiseen, vain suoritukseen, kuten JDBC (Java Database Connectivity) -ajurit.
  • testata: Testialueen riippuvuuksia tarvitaan vain testien kokoamiseen ja suorittamiseen (esimerkiksi JUnit).

Projektiviestintä

Tärkeä osa projektia on sisäinen viestintä. Vaikka se ei ole hopealuoti, keskitetty tekninen projekti -sivusto voi auttaa parantamaan näkyvyyttä joukkueessa. Pienellä vaivalla voit saada ammattitasoisen verkkosivustoprojektin toimimaan hyvin lyhyessä ajassa.

Tämä vie aivan uuden ulottuvuuden, kun Maven-sivuston sukupolvi integroidaan rakennusprosessiin jatkuvaa integraatiota tai jopa automaattisia yökehityksiä käyttäen. Tyypillinen Maven-sivusto voi julkaista päivittäin:

  • Projektin yleiset tiedot, kuten lähdetietovarastot, vikojen seuranta, tiimin jäsenet jne.
  • Yksikkötesti- ja testausselosteet
  • Automaattiset koodiarvostelut sekä Checkstyle ja PMD
  • Kokoonpano- ja versiotiedot
  • Riippuvuudet
  • Javadoc
  • Lähdekoodi indeksoidussa ja ristiviitatussa HTML-muodossa
  • Tiimin jäsenluettelo
  • Ja paljon enemmän

Jälleen kerran kuka tahansa Maven-tajuinen kehittäjä tietää heti, mistä etsiä tutustua uuteen Maven 2 -projektiin.

Käytännön esimerkki

Nyt kun olemme nähneet muutamia Maven 2: ssa käytetyistä peruskäsitteistä, katsotaanpa, miten se toimii todellisessa maailmassa. Tämän opetusohjelman loppuosa tutkii, kuinka käytämme Maven 2: ta yksinkertaisessa Java Enterprise Edition -projektissa. Demosovellus sisältää kuvitteellisen (ja yksinkertaistetun) hotellitietokantajärjestelmän. Osoittaakseen, kuinka Maven käsittelee projektien ja komponenttien välisiä riippuvuuksia, tämä sovellus rakennetaan kahdella komponentilla (katso kuva 3):

  • Liikelogiikan komponentti: HotelDatabase.jar
  • Verkkosovelluskomponentti: HotelWebApp.war

Voit ladata lähdekoodin seuraamaan Resurssit-ohjetta.

Määritä projektiympäristösi

Aloitamme määrittämällä työympäristösi. Todellisissa projekteissa joudut usein määrittelemään ja määrittämään ympäristö- tai käyttäjäkohtaiset parametrit, joita ei pitäisi jakaa kaikille käyttäjille. Jos olet esimerkiksi välityspalvelimen palomuurin takana, sinun on määritettävä välityspalvelimen asetukset, jotta Maven voi ladata JAR-tiedostoja verkkovarastoista. Maven 1 -käyttäjille build.properties- ja project.properties-tiedostot tekevät tämän työn. Maven 2: ssa ne on korvattu settings.xml-tiedostolla, joka menee hakemistoon $ HOME / .m2. Tässä on esimerkki:

     http scott tiikeri 8080 my.proxy.url 

Luo uusi projekti arkkityypin laajennuksella

Seuraava vaihe on luoda uusi Maven 2 -projektimalli liiketoimintalogiikkakomponentille. Maven 2 tarjoaa arkkityyppi laajennus, joka rakentaa tyhjän Maven 2 -yhteensopivan projektihakemistorakenteen. Tämä laajennus osoittautuu käteväksi hankkeen perusympäristön nopeaan käyttöönottoon. Arkkityypin oletusmalli tuottaa JAR-kirjastoprojektin. Useita muita artefaktityyppejä on saatavana muille tietyille projektityypeille, mukaan lukien verkkosovellukset, Maven-laajennukset ja muut.

Suorita seuraava komento asentaaksesi HotelDatabase.jar-projektisi:

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

Nyt sinulla on upouusi Maven 2 -projektihakemistorakenne. Vaihda HotelliTietokanta hakemistoa jatkaaksesi opetusohjelmaa.

Liiketoimintalogiikan toteuttaminen

Nyt toteutamme liiketoimintalogiikan. Hotelli luokka on yksinkertainen JavaBean. HotelliMalli luokka toteuttaa kaksi palvelua: findAvailableCities () - menetelmä, jossa luetellaan käytettävissä olevat kaupungit, ja findHotellitByCity () menetelmä, jossa luetellaan kaikki tietyn kaupungin hotellit. Yksinkertainen, muistipohjainen toteutus HotelliMalli luokka esitetään täällä:

paketti com.javaworld.hotels.model;

tuo java.util.ArrayList; tuo java.util.List;

tuoda com.javaworld.hotels.businessobjects.Hotel;

julkisen luokan hotelliMalli {

/ ** * Luettelo kaikista tunnetuista kaupungeista tietokannassa. * / yksityiset staattiset kielijonot [] kaupungit = {"Pariisi", "Lontoo",}; / ** * Luettelo kaikista tietokannan hotelleista. * / yksityinen staattinen hotelli [] hotels = {uusi hotelli ("Hotel Latin", "Quartier latin", "Pariisi", 3), uusi hotelli ("Hotel Etoile", "Place de l'Etoile", "Pariisi", 4), uusi hotelli ("Hotel Vendome", "Place Vendome", "Pariisi", 5), uusi hotelli ("Hotel Hilton", "Trafalgar Square", "Lontoo", 4), uusi hotelli ("Hotel Ibis" , "The City", "Lontoo", 3),}; / ** * Palauttaa tietyn kaupungin hotellit. * @param kaupunki kaupungin nimi * @ palauta luettelo hotellikohteista * / public List findHotelsByCity (merkkijono kaupunki) {Luettelo hotelleistaLöydetty = uusi ArrayList (); for (Hotelli: hotellit) {if (hotel.getCity (). equalsIgnoreCase (kaupunki)) {hotelsFound.add (hotelli); }} paluuhotellitLöydetty; } / ** * Palauttaa luettelon kaupungeista, joissa on hotelli. * @ palauta luettelo kaupunkien nimistä * / public String [] findAvailableCities () {paluu kaupungit; }}

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