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ó 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>

bélyegkép|jobbra|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 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

Célok Az alábbi szakaszok a gyakrabban használt célokat taglalják: archetype:generate Ú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.

compile 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 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 Jar fájlt készít (alapértelmezésben ${artifactId}-${version}.jar névkonvencióval a target/ mappába): mvn package

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

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

projecthelp:effective-pom 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 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ó

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: Eclipse NetBeans IntelliJ IDEA JBuilder JDeveloper (11.1.2-es verziótól) MyEclipse

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 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

Maven 1.x honlap Maven 2 honlap Maven pluginok Maven2 könyv

Kategória:Java fejlesztőeszközök Kategória:Apache Software Foundation Kategória:Automatikus szoftver-összeállítás