Apache Maven
Maven | |
Fejlesztő | Jason van Zyl |
Legfrissebb stabil kiadás | 3.9.9 (stabil verzió, 2024. augusztus 18.)[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ó
[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>
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
Célok
[szerkesztés]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]
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:
- 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
[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]- ↑ Release Notes - Maven - Version 3.9.9, 2024. augusztus 18. (Hozzáférés: 2024. szeptember 5.)
- ↑ Maven 2 Archetype Plugin