Projektkezelés Maven3 rendszerrel - I rész.
A HelloWorld alkalmazásoktól eltekintve kijelenthetjük, hogy minden projektnek szüksége van valamilyen projektkezelő rendszerre. Egyesek megoldják azzal, hogy külön ezzel nem foglalkoznak, a projektkezeléshez elegendő amit a kedvenc Java forráskód szerkesztőjük biztosít (pl. Eclipse, Netbeans, JDeveloper, stb.). Akiknek ez nem elég, beleértve jómagamat is, azok keresnek egy projektkezelő rendszert amellyel egyszerűsíthetik a fejlesztésnek e részét. Ami a Java-t illeti a két legjelentősebb projektkezelő az Apache Ant (http://ant.apache.org/) és az Apache Maven3 (http://maven.apache.org/). Mi a továbbiakban a Maven3-al fogunk foglalkozni. A projektkezeléssel kapcsolatban milyen teendők merülnek fel? Nos, nézzünk egy egyszerű Java alkalmazásnál (nem kell még elmenni a JEE alkalmazások irányában, de hamarosan azt is megnézzük) milyen teendőket kell elvégeznünk a projekt megvalósítása során:
- Projekt struktúra kialakítása (forráskód elhelyezés, csomagok kialakítása, binárisok elhelyezése, teszt osztályok forráskódjának a helye, stb.)
- Fordítás és erőforrások kezelése (pl. nyelvi állományok kezelése, konfigurációs xml kezelése, stb.)
- Tesztelés (pl. Junit tesztek fordítása, futtatása, eredmény értékelés)
- Telepítés
- Dokumentálás
Nos, a maven3 minden egyes részhez segítséget tud nyújtani úgy, hogy a programozónak csak a lényegi tartalommal, a kód/dokumentáció megírásával keljen foglalkozzon.
Ami még fontos előnye a maven3-nak (az ant-nak is, természetesen), hogy parancssorból futtatható. Ezáltal távoli szervereken is kiadható a projekt kezelési művelet (fordítás, teszt, telepítés, stb.) anélkül, hogy valamely szerkesztőtől függenénk. És ez az egyik ok amiért igyekszem messze elkerülni a forráskódszerkesztők adta projektkezelési lehetőséget. Ugyanakkor a maven3-al erről sem kell lemondanunk, mivel valamennyi forráskód szerkesztő ismeri a maven3-at és használhatjuk is. No, de térjünk vissza, hogy hogyan is lehet hasznosítani a maven3-at a projektjeinkben. A teljesség kedvéért a telepítéssel kezdjük.
Telepítés
Mielőtt telepítenénk és majd használatba vennénk a maven3-at, győződjünk meg, hogy már korábban telepítettünk egy Java környezetet. Az írásunkban feltételezem, hogy egy 64 bites környezetbe való, Java7 SDK került telepítésre.
A maven3-at a Maven3 letöltési oldalról lehet letölteni. A letöltés után, csomagoljuk ki pl. a c:\apps\maven3 alkönyvtárba. A kicsomagolás után állítsuk be a M2_HOME környezeti változót úgy, hogy a c:\apps\maven3 alkönyvtárra mutasson, továbbá adjuk hozzá a PATH változóhoz a M2_HOME\bin útvonalat.
A konfigurálást a maven3-nál a settings.xml állományban lehet elvégezni. A maven3 indításkor ellenőrzi, hogy létezik-e a felhasználó 'home' könyvtárában egy .m2 nevezetű alkönyvtár és ezen belül a settings.xml. Ha nincs, akkor ezeket létrehozza. Ez pl. windows7 alatt a C:\Documents and Settings\<felhasználó_név>\.m2 linux alatt a ~/.m2 könyvtár lesz. Ezekre fontos írás engedélyt adni.
Hogy minden rendben van-e a telepítéssel, ezt a következő egyszerű teszttel ellenőrízhetjük:
Adjuk ki az mvn -version parancsot:
Ahhoz, hogy a .m2 alkönyvtárat létrehozzuk, annak ellenére, hogy még nincsen projektünk, adjuk ki a:
mvn clean
parancsot:
c:\apps>mvn clean
Nyilván hibát kapunk, hisz nincs projekt, de ha belenézünk a 'home' könyvtárunkban, látni fogjuk, hogy létrejött a .m2 alkönyvtár és alatta a repository alkönyvtár is.
Ami az alap konfigurációt illeti, egy lényegi beállítást kell még megadni. Nevezetesen azt, hogy hol legyen az úgynevezett 'repository'. Ez az a hely, ahova majd a maven3 letölti a projekt(ek) során használt jar-okat. Ha nem adjuk meg, akkor az .m2/repository alkönyvtárba fogja letölteni - ami létre is jött ahogy az imént láttuk-, kialakítva egy alkönyvtár struktúrát - ezt majd később részletesebben is megnézzük. Ha ezen változtatni akarunk, pl. hogy a c:\apps\maven3-repository alá kerüljenek a jar-ok, akkor a settings.xml állományban kell módosítanunk.
Az alapértelmezéseket tartalmazó settings.xml -t megtaláljuk a M2_HOME/conf alkönyvtárban. Fogjuk a settings.xml -t és másoljunk belőle egy példányt a .m2 alkönyvtárban, majd nyissuk meg. Keressük meg a következő kikommentezett részt:
<!-- localRepository
<localRepository>/path/to/local/repo</localRepository>
részre, és írjuk át a következőre:
<localRepository>c:/apps/maven3-repository</localRepository>
Mentsük el az állományt. A .m2 alkönyvtárból törölhetjük is a repository alkönyvtárat, hisz erre már nem lesz szükségünk. A továbbiakban a repository-kánt beállított alkönyvtárra az M2_REPO névvel fogok hivatkozni.
Ezennel a telepítéssel és alapvető konfigurációval végeztünk. Vágjunk bele a projekt kezelésbe!
A Projekt struktúra kialakítása
Nos, maga a projekt legyen viszonylag egyszerű, ugyanakkor elegendően összetett, hogy a bevezetőben felsorolt teendők elvégezhetőek legyenek. Készítsünk el egy osztály könyvtárat (egy jar lesz a végtermék) melyben megvalósításra kerülnek különböző rendezési algoritmusok. A projekt neve legyen "Rendezést Megvalósító Osztálykönyvtár"
A projektstruktúra kialakításához meg kell határoznunk néhány paramétert:
- Java csomag megnevezése, amely alatt találhatóak a rendezéseket megvalósító osztályok: com.thotsoft.rendezes
- Az előállítandó termék (artifact más néven) megnevezése?: rendezes
- A repository-ba milyen csoport (group) alá kerüljön majd a termék (artifact)?: com.thotsoft
- Milyen verziószámmal legyen ellátva a termék a fejlesztés alatt?: 1.0-SNAPSHOT
- Milyen verziószámmal legyen ellátva a végleges termék?: 1.0-RELEASE
Nos, az induláshoz meg van minden. Ahelyett, hogy projekt struktúrát kézzel hoznánk létre, adjuk ki a következő parancsot a c:\work könyvtárba (ahova létre szeretnénk hozni a projekt könyvtárat):
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.1 -DgroupId=com.thotsoft -DartifactId=rendezes -Dpackage=com.thotsoft.rendezes -Dversion=1.0-SNAPSHOT
Az eredmény a következőhöz hasonló kell, hogy legyen (ne lepődjünk meg, induláskor le fogja tőlteni a szükséges állományokat és ezt meg jeleníti a képernyőn, továbbá félúton meg fog állni - pirossal jelölve lentebb - és kérni fogja a nyugtázást, hogy a megadottaknak megfelelően hozza létre a struktúrát. Egy ENTER-rel nyugtázzuk a kérdést):
[INFO] Scanning for projects...
Ezáltal létre is jött az első projektünk melynek szerkezete a következő:
rendezes |-- pom.xml `-- src |-- main | `-- java | `-- com | `-- thotsoft | `-- rendezes | `-- App.java `-- test `-- java `-- com `-- thotsoft `-- rendezes `-- AppTest.java
Lényeges tudnivalók arról ami létrejött:
- A pom.xml képviseli a projekt állományt. Minden ami projekttel kapcsolatos itt kell megadni, módosítani.
- A src/main alkönyvtár alatt kell elhelyezni a forráskódott, ahogy a hiearchiából is látszik
- A src/test alkönyvtár alatt pedig a tesztelésre szánt forráskódot. A jelen esetben azonos a hiearchia a teszt alatt is. Erről majd később fogunk beszélni.
A könyvtárstruktúra egy javasolt struktúra. Ha ez nekünk megfelel, akkor nagyon gyorsan lehet épitkezni és csakis a lényegre - a feladat megvalósítására - kell koncentrálnunk. Ha ez a könyvtárstruktúra nem felel meg, akkor némi plusz munkával meg lehet mondani a maven3-nak, hogy hol lesz elhelyezve a forráskód, hol a teszt forráskód, hol lesznek az egyéb erőforrások stb. Az elmult évek tapasztalata azt mutatja, hogy a projektek nagy részének ez a struktúra tökéletesen megfelel, így mielőtt nekifognánk átírni az alapértelmezett könyvtár definíciókat, át kellene gondolni, hogy mi lenne, ha mi alkalmazkodnánk a maven3 jól bevált projekt könyvtár struktúrájához. Megéri.
Az első projektünk ezzel létre is jött és máris használható. Az App.java egy egyszerű, HelloWorld jellegű alkalmazást tartalmaz, a AppTest.java pedig az App.java tesztelésére tartalmaz némi példa kódot.
A létrejött projektünket le is tudjuk fordítani és a tesztelés is automatikusan végrehajtódik. Lépjünk a c:\work\rendezes alkönyvtárba, majd adjuk ki a következő parancsot:
- Maven Quickstart archetype: http://maven.apache.org/archetype/maven-archetype-bundles/maven-archetyp...
- Maven Getting Started: http://maven.apache.org/guides/getting-started/index.html
- Sonatype Maven site: http://www.sonatype.org/maven