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.

Maven

FejlesztőJason van Zyl
Legfrissebb stabil kiadás3.9.9 (stabil verzió, 2024. augusztus 18.)[1]
Programozási nyelvJava
Operációs rendszerplatformfüggetlen
PlatformJava virtuális gép
Kategória
LicencApache Licenc 2.0
A Maven weboldala

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:

 validate
 generate-sources
 process-sources
 generate-resources
 process-resources
 compile
 process-test-sources
 process-test-resources
 test-compile
 test
 package
 install
 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

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

archetype:generate

szerkesztés

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

mvn archetype:generate -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]

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.

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.

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

mvn package

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

mvn install

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>
        <syntaxhighlight lang="text">1.5</syntaxhighlight>
        <target>1.5</target>
      </configuration>
    </plugin>
  </plugins>
 </build>

További információk

szerkesztés
  1. Release Notes - Maven - Version 3.9.9, 2024. augusztus 18. (Hozzáférés: 2024. szeptember 5.)
  2. Maven 2 Archetype Plugin