Maven hakemistorakenteet

Kirjoittelin aiemmassa artikkelissa pääkohtia Maven frameworkistä, nyt on tullut aika kirjoitella sen hakemistorakenteista.

Yksi etu Maven työkalulla perustetuissa projekteissa on, että Maven luo aina standardin hakemistorakenteen ja määrittää aina samalla tapaa minne projektikansiossa päätyy esim. lähdekoodit, resurssitiedostot, testit, web-sivut, jne. Kirjastoille ei ole kansiota koska Maven hallinnoi itse apukirjastoja ja kopioi tarvittavat mukaan vasta paketoinnin yhteydessä.

Tämä on hyödyllistä sen vuoksi, että java-maailmassa on totuttu valinnan vapauteen ja kiroukseen. Jokainen uusi IDE työväline tai plug-in tuo mukanaan aina uudet hakemistorakenteet ja eri rakenteilla teetetyn koodin yhdistäminen ja ymmärtäminen on nopeasti aika vaikeaa.

Maven luo seuraavanlaisen hakemistorakenteen:

mavenprojectstructure

Projektikansiossa on konfiguraatiotiedosto pom.xml, sekä seuraavat alikansiot:

-src (kaikki lähdekoodi menee tänne)
      - main (varsinainen ajettava koodi tänne)
            - java (java lähdekoodi tänne)
            - resources (muut luokkapolun resurssit kuten .properties tiedostot ja .xml tiedostot)
            - webapp (web-sisältö kuten HTML, jsp, kuvat, web.xml, jne)
    - test (ajettavat yksikkötestit tänne)

-target (tänne ilmestyy buildatut ja paketoidut sovelluksen osat)

pom.xml tiedosto sisältää kaikki projektin Maven-asetukset, kuten projektin nimen, erilaiset käytössä olevat plug-init, sekä tärkeimpänä riippuvuudet, eli eri kirjastojen versiot.

Kun kaikki on paikallaan voit suorittaa projektikansiossa maven operaatioita kuten:

  • mvn compile
  • mvn test
  • mvn package
  • mvn install

Maven – Rakkautta Ensi Silmäyksellä

Törmäsin taannoin uuteen Java akronyymiin mikä ei vielä vuosi sitten sanonut itselleni juuri mitään. Maven on Java-ohjelmistoille tarkoitettu työkalu, joka pystyy auttamaan ohjelmistoprojektin hallinnassa.

http://maven.apache.org/

Maven osaa mm.

  • perustaa projektirungon vakiokansiorakenteella (Maven Archetypes)
  • hallinnoida sen riippuvuuksia, esim. mitä framework/lisäkirjastoja/ajureita otetaan ja mitä versioita
  • automatisoida yksikkötestien ajon esim. TDD käyttöön
  • ladata, asentaa ja ajaa testipalvelimen web-moduulien testaamiseen tarvittaessa

Mikä kaikkein mukavinta, Maven:llä luodut projektit voi avata suoraan Netbeansissä, tai importoida Eclipseen. Toisaalta niitä voi kääntää, paketoida, testata, ja asentaa myös suoraan komentorivikomennoin.

Mavenin avulla siis ohjelmistoprojektissa:

  • Kansiorakenne yhdenmukaistuu ja IDE valinta menettää merkityksensä – keskitytään olennaiseen
  • Yksikkötestaukseen on apua ja jopa rohkaisua
  • Buildit voidaan tehdä mistä vaan, milloin vain
  • Omien moduulien versiointia ja versioriippuvuuksia voi hallita samalla tavoin
  • Mikä kaikkein tärkeintä, riippuvuuksien hallintaongelmat eli javan .jar helvetti poistuvat kokonaan, voit helposti muuttaa projektin kirjastoriippuvuuksia ja palauttaa ne takaisin jos uusi ajuri tai framework versio ei testausta läpäisekään.

Kun on kerran kokeillut Maveniä on vaikea vaihtaa takaisin muuhun. Ja Maven + Netbeans on aivan killeri yhdistelmä.

Tällä hetkellä koneeltani löytyy komentoscriptejä jotka auttavat perustamaan maven standalone/web projektirunkoja, esim:


mvn archetype:generate
-B
-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-quickstart
-DgroupId=org.mycompany.facebookclient
-DartifactId=facebookClient


mvn archetype:generate
-B
-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-webapp
-DgroupId=org.mycompany.services
-DartifactId=services

Kun olet perustanut Maven projektin, voit helposti esim. kääntää, testata ja paketoida sen komennolla:

mvn package

mvn package

mvn package

Onko sinulla kokemuksia Mavenistä tai kysymyksiä? Kommentoi!

mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes  -DarchetypeArtifactId=maven-archetype-webapp  -DgroupId=fi.tieturi.services  -DartifactId=services

Spagettikoodin avajaiset

Uuden Spagettikoodi- blogin avajaiset. Perustin tämän nurkan kirjoitellakseni huomioita ohjelmistokehityksestä. Huomiot on tarkoitettu ensisijaisesti omaan käyttöön vähän päiväkirjanomaisesti mutta kyllä niitä muutkin saavat lukea jos kiinnostaa. Jos käyt täällä katsomassa niin älä ole ujo, vaan jätä toki kommenttia tai terveisiä!