Maven

Katsaus Apache Maven -käännösympäristöön

Mika Kumanto

Maven - Historia

  • Maven kehitystyö alkoi 2002 Apache Turbine -projektin aliprojektina
  • 2003 hyväksyttiin Apachen top level projektiksi
  • 2004 julkaistiin 1.0 version
  • Maaliskuussa 2011 Mavenin uusin versio on 3.0.31
  • Maven 2.2.x vielä suuresti käytössä, koska uusin Maven 3.x rikkoi yhteensopivuuden vanhempiin versioihin suurien muutoksien takia

Maven - Tarkoitus

  • Maven on ohjelmistoprojektin hallintaa helpottava ja tukeva työkalu
  • Automatisoida käännöstyö ja mahdollistaa kääntämisen ilman IDEä
  • Projektin riippuvuuksien hallitseminen
  • Tarkoitettu lähinnä Java-projekteille, mutta tukea löytyy muillekin ohjelmointikielille. Tosin käytännössä ei ole suuressa käytössä muiden ohjelmointikielien projekteissa

Maven - Ant

  • Apache Ant -käännöstyökalu ja Maven toteuttaa samoja asioita, mutta niissä on isoja eroja toiminallisuuksissa
  • Ant -työkalulle määritellään build.xml -tiedosto, jossa määritellään halutut tehtävät.
  • Maven käyttää pom.xml -tiedostoa (Product Object Model) vastaavaan tehtävään
  • Iso ero Mavenin ja Antin välillä on se, että Mavenin projekteissa on tietynlainen rakenne projektilla ja määritelty mahdolliset tehtävät ja tavoitteet

Maven - Ant jatkuu

  • Eräs iso rajoitus Apache Ant -käännöstyökalussa on riippuvuudenhallinnan puute
  • Ilman sitä jää kirjastojen, ajureiden ja vastaavien hallinnointi ohjelmoijalle ja hänen on huolehdettiva, että projekti sisältää vaaditut kirjastot
  • Apache Ant -käännöstyökalulle on tosin tehty Apache Ivy niminen laajennus, joka huolehtii riippuvuudenhallinnasta

Maven - Ant jatkuu vol 2

  • Eroistaan huolimatta molemmille työkaluille on edelleen tarvetta
  • Ehkä yksi pieni tai isokin ongelma Mavenissa on aloittelevalle käyttäjälle sen toiminallisuus
  • Maven projektit sisältävät ennaltamääriteltyjä tavotteita, joita ei pakolla ole mitenkään kirjattu mitenkään pom.xml konfigurointitiedostoon

Maven - Käyttö komentoriviltä

Mavenin käyttö kannattaa aloittaa testaamalla, onko ohjelma asennus onnistuneesti

mvn --version
mavenin versio

Yksinkertainen web-projekti voidaan luodaan seuraavasti:

mvn archetype:generate -DgroupId=fi.yritys.sovellus \
 -DartifactId=websovellus -DarchetypeArtifactId=maven-archetype-webapp

Maven - Käyttö komentoriviltä

  • Mavenilla pystyy generoimaan archetype:generate komennolla valmiin pohjan projektille
  • Sen kanssa voidaan käyttää vakiona tulevaa katalogia tai ulkopuolisia ja omia repositoryjä

Viime sivulla ollut komento luo seuraavanlaisen projektirakenteen:

simppeli projektirakenne

Maven - Käyttö komentoriviltä

Tämän jälkeen voidaan kääntää luokat ja luoda war-paketti komennoilla:

mvn compile
mvn package
  • Kyseinen esimerkki ei sisällä java-luokkia, mutta mvn compile on pakolline ennen paketointia
  • Komennot luovat target-kansion ja sinne war-paketin, joka voidaan siirtää web-palvelimelle

Maven - Käyttö komentoriviltä

  • Mavenin kanssa tosin ei ole välttämätöntä asentaa erillistä web-palvelinta
  • Vaan palvelinta voidaan ajaa suoraan mavenista
  • Lisätään seuraavat rivit pom.xml -tiedostoon
...
</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</groupId>
</plugin>
</plugins>
...
  

Maven - Käyttö komentoriviltä

  • Tämän jälkeen voidaan käynnistää Mavenin avulla web-palvelin komennolla:
  • mvn jetty:run
  • Komento lataa ensiksi Jetty runtimen, jos sitä ei valmiiksi koneelta löydy
  • Tämän jälkeen se käynnistää localhostiin porttiin 8080 instanssin jettystä
  • Enemmän tietoa Mavenin jetty-pluginista löytyy täältä ja sen käytöstä

Maven - Perusteet

  • Mavenin jetty komento on lisäosana tuleva ominaisuus, mutta vakiona Maven sisältä seuraavat komennot:
    • mvn compile - Kääntää luokat ja vie käännetyt luokat target/classes kansioon
    • mvn test - Ajaa testit(mvn test-compile kääntää vain testit)
    • mvn package - Paketoi ohjelman (JAR, WAR, etc)
    • mvn install - Asentaa luokat lokaaliin repositoryyn
    • mvn clean - Poistaa käännetyt ja paketoidut tiedostot (hävittää target-kansion)

Maven - Perusteet

  • Mavenin projektirakenne hieman isommassa projektissa:
  • isompi projekti
  • Ei ole välttämätöntä käyttää Mavenin vakiorakennetta, mutta se on erittäin suositeltavaa. Hakemistorakenne
    • src/main/java kansio sisältää java-luokkien lähdekodit
    • src/main/resources sisältää konfiguraatio-tiedostot
    • src/main/webapp sisältää web-resurssit (jsp, html, css, web.xml, jne)

Maven - pom.xml

  • groupId - Uniikki organisaatiota tai projektia kuvaava nimi
  • artifactId - Projektin nimi
  • packaging - Määrää mihin muotoon projekti paketoidaan (jar, pom, war, ear, rar, par, maven-plugin)
  • dependencies - Projektin riippuvuudet
  • build - Projektin kääntäminen/ajaminen
pom.xml

Maven - Lisätietoa