Apache Maven

A Wikipédiából, a szabad enciklopédiából
Maven
Maven logo.svg

Fejlesztő Jason van Zyl
Legfrissebb stabil kiadás 3.3.9 (2015. november 22.) [1] +/-
Legfrissebb fejlesztői kiadás ismeretlen +/-
Programozási nyelv Java
Operációs rendszer Platformfüggetlen
Platform Java virtuális gép
Kategória szabad szoftver
Licenc Apache Licenc 2.0
A Maven weboldala

Az Apache Maven (röviden Maven) egy szoftver, amelyet szoftverprojektek menedzselésére és a build folyamat automatizálására lehet használni. Jason van Zyl készítette 2002-ben. Funkcionalitásában hasonlít az Apache Ant eszközhöz (és némi hasonlóságot mutat a PHP-s PEAR-rel és a perles CPAN-nal, de egyszerűbb és XML-alapú a konfigurációs modellje). A projektet az Apache Software Foundation hosztolja, ahol korábban a Jakarta Projekt részeként működött.

A Maven bevezeti a POM, azaz a Projekt Objektummodell (angolul: Project Object Model) fogalmát. Egy POM egy buildelendő projektet ír le és annak függőségeit. Az egyes lépéseket céloknak, angolul goal-oknak nevezik. Vannak előre definiált célok a tipikus feladatokra, mint például a kód fordítása és csomagolása, de a felhasználónak lehetősége van saját célokat is definiálni a projektspecifikus lépések végrehajtására.

A Maven hálózatképes, tehát szükség esetén dinamikusan is le tud tölteni komponenseket. Repository névvel illetik a különböző hosztok fájlrendszereinek azon mappáit, ahol a letölthető komponensek találhatók. A Maven nem csak a repository-kból való letöltést támogatja, hanem a készült szoftvercsomag feltöltését is. Ezzel az automatizálható le- és feltöltési mechanizmussal a Maven de facto szabványt próbál teremteni, de elég lassan fogadja el a Java közösség.

A Maven plugin alapú architektúrája lehetővé teszi tetszőleges parancssorból vezérelhető alkalmazás használatát. Ez elméletileg lehetővé teszi tetszőleges programnyelvekhez való pluginek készítését, de a gyakorlatban minimális mennyiségű nem javás plugin készült.

Konfiguráció helyett Konvenció[szerkesztés]

A Maven filozófiája a buildelés szabványosítása és ezáltal a szoftvertervezési minták terjesztése. A konvenciókhoz való ragaszkodás jelentős mértékben korlátozza a projektek variálhatóságát. Új projektek létrehozásához jól használható, viszont létező projektekhez nehezen kapcsolható, ha azok nem illeszkednek a Maven konvencióihoz. A Maven 2 verzióval azonban valamelyest enyhült a strukturális szigor.

Következzen itt egy példa POM fájl.

<project>
  <!-- model verzió mindig 4.0.0 a Maven 2.x POM-oknak -->
  <modelVersion>4.0.0</modelVersion>
  
  <!-- projekt koordináták, olyan értékek csoportja amely egyedileg azonosítja ezt projektet -->
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>

  <!-- könyvtár függőségek -->
  
  <dependencies>
    <dependency>
      <!-- szükséges könyvtárak -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <!-- ez a függőség csak a tesztek futtatáshoz és fordításához használatos -->
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
A Maven szoftver eszköz automatikusan generálja ezt a könyvtár szerkezetet egy Java projekt számára.
Könyvtár név Cél
project home Tartalmazza a pom.xml-t és az összes alkönyvtárt.
src/main/java Tartalmazza a szállítandó Java forráskódot a projekt számára.
src/main/resources Tartalmazza a szállítandó erőforrásokat a projekt számára, mint például a property fájlok.
src/test/java Tartalmazza a teszt Java forráskódokat (JUnit vagy TestNG tesztesetek, például) a projekt számára.
src/test/resources Tartalmazza a teszteléshez szükséges erőforrásokat.

Projektek életciklusa[szerkesztés]

Egy Maven projekt életciklusa a következő célokból (angolul goal-okból) áll:

 1  validate
 2  generate-sources
 3  process-sources
 4  generate-resources
 5  process-resources
 6  compile
 7  process-test-sources
 8  process-test-resources
 9  test-compile
10  test
11  package
12  install
13  deploy

Az alapötlet az, hogy az életciklus minden céljának végrehajtásához minden azt megelőző célnak sikeresen végre kell hajtódnia. Például az mvn install futtatásakor a Maven megvizsgálja, hogy az mvn package sikeresen lefutott-e már.

Vannak olyan célok is, amelyek az életcikluson kívül helyezkednek el, tehát a Maven nem futtatja őket feltétlenül, viszont a projekthez tartozó pom.xml fájlban, azaz a projekt objektummodelljében ezek a célok is hozzáadhatóak a projekt alapértelmezett életciklusához:

  • assembly:assembly
  • site
  • site-deploy

Célok[szerkesztés]

Az alábbi szakaszok a gyakrabban használt célokat taglalják:

archetype:create[szerkesztés]

Új projektek létrehozására használható az archetype plugin create célja:

mvn archetype:create -DgroupId="com.programozo.my" -DartifactId="my-project" -Dversion="0.0.1"

Az archetype plugin használatát a Maven dokumentációja részletezi.[2]

compile[szerkesztés]

A forrásfájlok lefordítása a compile céllal történik:

mvn compile

A forrásfájlok alapértelmezett helye a src/main/java/ mappa. A lefordított osztályok a target/classes/ mappába kerülnek alapértelmezésben.

test[szerkesztés]

A Unit Test-ek fordítását és futtatását a test cél hajtja végre:

mvn test

A JUnit forrásfájlok alapértelmezett helye a src/test/java/ mappa, a lefordított tesztosztályok pedig a target/test-classes/ mappába kerülnek. A tesztek eredménye a target/surefire-reports/ mappába íródik alapértelmezésben.

package[szerkesztés]

Jar fájlt készít (alapértelmezésben ${artifactId}-${version}.jar névkonvencióval a target/ mappába):

mvn package

install[szerkesztés]

Bemásolja a jar fájlt a ~/.m2/repository/${groupId}/${artifactId}/${version} mappába, azaz a lokális repository-ba.

mvn install

deploy[szerkesztés]

Telepíti az alkalmazást a bekonfigurált alkalmazásszerverre.

mvn deploy

projecthelp:effective-pom[szerkesztés]

A projektspecifikus beállítások kiiratására használható a projecthelp plugin effective-pom célja:

mvn projecthelp:effective-pom

projecthelp:effective-settings[szerkesztés]

Az általános Maven beállítások kiiratására használható a projecthelp plugin effective-settings célja:

mvn projecthelp:effective-settings

IDE integráció[szerkesztés]

A Maven-nek léteznek beépülő moduljai számos népszerű IDE-höz, melyek integrációt nyújtanak a Mavennal való az IDE build mechanizmusához, kódszerkesztő eszközeihez. Ezekkel lehetőség van az IDE-ből lefordítani a projekteket, és beállítani a classpath-t a kód kiegészítéshez ill. fordító hibák színezéséhez stb. Néhány példa a népszerű IDEk közül, melyek támogatják a Maven-nel való fejlesztést:

Ezek a beépülő modulok lehetőséget adnak a POM szerkesztéséhez illetve a POM használatához: azaz a Maven segítségével direkt az IDE-n belül meghatározhatók a projekt függőségek teljes halmaza.

Java 5 kompatibilitás[szerkesztés]

A Maven alapértelmezésben Java 1.4 verzió szerint fordít, a Java 5 verziót explicit konfigurálni kell a POM-ban:

 <build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.5</source>
        <target>1.5</target>
      </configuration>
    </plugin>
  </plugins>
 </build>

További információk[szerkesztés]