Apache Maven
Maven | |
![]() | |
Fejlesztő | Jason van Zyl |
Legfrissebb stabil kiadás | 3.9.8 (stabil verzió, 2024. június 19.)[1] |
Programozási nyelv | Java |
Operációs rendszer | platformfüggetlen |
Platform | Java virtuális gép |
Kategória |
|
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ó
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>
![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Maven_CoC.svg/220px-Maven_CoC.svg.png)
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.[2]
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
Informatikai portál • összefoglaló, színes tartalomajánló lap